В чем разница между std::valarray и std::array

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


person codekiddy    schedule 22.01.2012    source источник
comment
См. stackoverflow.com/questions/1602451/c-valarray-vs-vector.   -  person Johnsyweb    schedule 23.01.2012
comment
Это valarray, а не vallaray. Это совсем не одно и то же, вам, вероятно, не следует использовать valarray, так как он настолько плохо продуман, что делает его бесполезным. Разницы между array и vector должно быть достаточно.   -  person Alexandre C.    schedule 23.01.2012


Ответы (3)


  • valarray уже был в C++03, array появился в C++11
  • valarray имеет переменную длину, array — нет.
  • valarray предназначен для числовых вычислений и предоставляет множество операций, включая +, -, *, cos, sin и т. д. array этого не делает.
  • valarray имеет интерфейс для извлечения срезов массива (подмассивов), array — нет.
person Yakov Galka    schedule 22.01.2012
comment
в то время как все ответы хороши, и в каждом есть что-то еще, что я не знал, что принять. так что спасибо всем вам!. - person codekiddy; 23.01.2012
comment
Позвольте мне добавить пару ссылок о array и array по сравнению с vector en.cppreference.com/ w/cpp/container/array и stackoverflow.com/questions/15079057/ - person Reb.Cabin; 23.08.2015

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

Однако не используйте valarray; просто используйте vector вместо этого.

person Kerrek SB    schedule 22.01.2012
comment
@zhermes: хм, может быть, проверьте этот вопрос для получения некоторой справочной информации. По сути, стандартные алгоритмы и 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].

person Dietmar Kühl    schedule 22.01.2012