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

Да это был задан ранее, и ответ был:

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

или же:

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

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

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

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

6

Решение

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

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

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

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

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

11

Другие решения

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

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

6

По вопросам рекламы [email protected]