Да это был задан ранее, и ответ был:
valarray
s (массивы значений) предназначены для переноса части скорости Fortran в C ++. Вы бы не сделалиvalarray
указателей, так что компилятор может делать предположения о коде и оптимизировать его лучше. (Основная причина того, что Fortran такой быстрый, заключается в том, что нет типа указателя, поэтому не может быть псевдонима указателя.)
или же:
valarray
также предполагается исключить любую возможность алиасинга […]
Но эти ответы не имеют смысла для меня.
valarray
а также vector
являются шаблоны классов, и как таковые, они даже не существовать пока не создан.
И, конечно же, vector<int>
не вызывает проблем с псевдонимами больше, чем valarray<int>
делает.
Учитывая это, какова была цель valarray
и почему они не просто поместили ту же функциональность в vector
вместо?
Разделение концерна? vector
и valarray
решать разные проблемы. Цитирование из стандарта, а vector
это (§23.3.6.1 [vector.overview] p1
)
… Контейнер последовательности, который поддерживает итераторы произвольного доступа. Кроме того, он поддерживает (амортизируется) операции вставки и удаления с постоянным временем в конце; вставить и стереть в середине взять линейное время. Управление хранилищем осуществляется автоматически, хотя могут быть даны подсказки для повышения эффективности.
в то время как valarray
это (§26.6.2.1 [template.valarray.overview] p1
)
… одномерный смарт-массив, элементы которого нумеруются последовательно от нуля. Это представление математической концепции упорядоченного набора значений. Иллюзия более высокой размерности может быть вызвана знакомой идиомой вычисляемых индексов вместе с мощными возможностями поднабора, предоставляемыми обобщенными операторами индекса.
Как видите, они служат разным целям. vector
является обобщенным динамический массив, в то время как valarray
представляет собой набор значений. Это также не изменяемый размер и только назначаемый.
Валаррей имеет механизм среза
Ожидается, что valarray будет реализован с использованием шаблона выражения для его числовых операторов.