valarray
класс выглядит так же, как array
класс, не могли бы вы объяснить мне, где я предпочитаю valarray
array
или наоборот?
В чем разница между std::valarray и std::array
Ответы (3)
valarray
уже был в C++03,array
появился в C++11valarray
имеет переменную длину,array
— нет.valarray
предназначен для числовых вычислений и предоставляет множество операций, включая+
,-
,*
,cos
,sin
и т. д.array
этого не делает.valarray
имеет интерфейс для извлечения срезов массива (подмассивов),array
— нет.
array
и array
по сравнению с vector
en.cppreference.com/ w/cpp/container/array и stackoverflow.com/questions/15079057/
- person Reb.Cabin; 23.08.2015
valarray
— это динамическая структура данных, размер которой может меняться во время выполнения и которая выполняет динамическое размещение. array
— это статическая структура данных, размер которой определяется во время компиляции (и это также совокупность).
Однако не используйте valarray
; просто используйте vector
вместо этого.
vector
дают вам все, что вам нужно.
- person Kerrek SB; 23.01.2012
Шаблоны классов, связанные с std::valarray<T>
, предназначены для поддержки методов оптимизации, известных как шаблоны выражений. Я не пытался сделать это, но я понимаю, что спецификация не совсем требует этого, а также не поддерживает это в достаточной степени. В целом std::valarray<T>
— довольно специализированный класс, и он не очень широко используется. Кроме того, я думаю, что поддержка аргументов шаблона для std::valarray<T>
является ограниченным набором (например, числовые встроенные типы).
С другой стороны, std::array<T, n>
представляет собой массив фиксированного размера, поддерживающий, насколько это возможно, при фиксированном размере обычный интерфейс контейнера. По сути, std::array<T>
является более удобной версией T[n]
.
valarray
, а неvallaray
. Это совсем не одно и то же, вам, вероятно, не следует использоватьvalarray
, так как он настолько плохо продуман, что делает его бесполезным. Разницы междуarray
иvector
должно быть достаточно. - person Alexandre C.   schedule 23.01.2012