valarray против вектора: почему был введен valarray?

Да, об этом уже спрашивали, и ответ был:

valarrays (массивы значений) предназначены для переноса части скорости Fortran в C++. Вы бы не сделали valarray указателей, так что компилятор может делать предположения о коде и оптимизировать его лучше. (Основная причина того, что Fortran такой быстрый, состоит в том, что нет типа указателя, поэтому не может быть псевдонима указателя.)

или же:

valarray также предполагается исключить любую возможность алиасинга [...]

Но эти ответы не имеют смысла для меня.

valarray а также vector являются шаблонами классов, и, как таковые, они даже не существуют, пока не будут созданы.
И, конечно же, vector<int> не вызывает проблем с псевдонимами больше, чем valarray<int> делает.

Учитывая это, какова была цель valarrayи почему они не просто поместили ту же функциональность в vector вместо?

2 ответа

Решение

Разделение концерна? vector и valarray решать разные проблемы. Цитирование из стандарта, а vector это (§23.3.6.1 [vector.overview] p1)

... контейнер последовательности, который поддерживает итераторы с произвольным доступом. Кроме того, он поддерживает (амортизируется) операции вставки и удаления с постоянным временем в конце; вставить и стереть в середине взять линейное время. Управление хранилищем осуществляется автоматически, хотя могут быть даны подсказки для повышения эффективности.

в то время как valarray это (§26.6.2.1 [template.valarray.overview] p1)

... одномерный смарт-массив, элементы которого нумеруются последовательно от нуля. Это представление математической концепции упорядоченного набора значений. Иллюзия более высокой размерности может быть вызвана знакомой идиомой вычисляемых индексов вместе с мощными возможностями поднабора, предоставляемыми обобщенными операторами индекса.

Как видите, они служат разным целям. vector является обобщенным динамическим массивом, а valarray представляет собой набор значений. Это также не изменяемый размер и только назначаемый.

  • Валаррей имеет механизм среза

  • Ожидается, что valarray будет реализован с использованием шаблона выражения для его числовых операторов.

Другие вопросы по тегам