В чем разница между std :: valarray и std :: array - PullRequest
13 голосов
/ 23 января 2012

valarray класс выглядит так же, как array класс, не могли бы вы объяснить, где бы я предпочел valarray вместо array или наоборот?

Ответы [ 3 ]

18 голосов
/ 23 января 2012
  • valarray уже был в C ++ 03, array является новым в C ++ 11
  • valarray - переменная длина, array - нет.
  • valarray предназначен для числовых вычислений и предоставляет множество операций, включая +, -, *, cos, sin и т. Д. array нет.
  • valarray имеет интерфейс для извлечения фрагментов массива (вложенных массивов), array - нет.
5 голосов
/ 23 января 2012

Шаблоны классов, относящиеся к std::valarray<T>, предназначены для поддержки методов оптимизации, известных как шаблоны выражений . Я не пытался сделать это, но я понимаю, что спецификация не требует этого, а также не достаточно поддерживает это. В целом std::valarray<T> является довольно специализированным классом, и он не очень широко используется. Кроме того, я думаю, что поддержка аргументов шаблона для std::valarray<T> является ограниченным набором (например, числовые встроенные типы).

С другой стороны std::array<T, n> - массив с фиксированным размером, поддерживающий, насколько это возможно, при фиксированном размере обычный интерфейс контейнера. По сути, std::array<T> является более удобной для использования версией T[n].

4 голосов
/ 23 января 2012

valarray - это динамическая структура данных, размер которой может изменяться во время выполнения и которая выполняет динамическое распределение.array - это статическая структура данных, размер которой определяется во время компиляции (и это также совокупность).

Не используйте valarray, хотя;просто используйте vector вместо

...