valarray против вектора: почему был введен valarray?
Да, об этом уже спрашивали, и ответ был:
valarray
s (массивы значений) предназначены для переноса части скорости 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 будет реализован с использованием шаблона выражения для его числовых операторов.