valarray
класс выглядит так же, как и класс array
, можете ли вы объяснить мне, где я предпочитаю valarray
over array
или наоборот?
В чем разница между std:: valarray и std:: array
Ответ 1
-
valarray
уже был в С++ 03,array
является новым в С++ 11 -
valarray
- переменная длина,array
- нет. -
valarray
предназначен для числовых вычислений и обеспечивает множество операций, включая+
,-
,*
,cos
,sin
и т.д.array
. > -
valarray
имеет интерфейс для извлечения фрагментов массива (вспомогательные массивы),array
не работает.
Ответ 2
Шаблоны классов, относящиеся к std::valarray<T>
, предназначены для поддержки методов оптимизации, известных как шаблоны выражений. Я не пытался это сделать, но я понимаю, что спецификация не совсем требует этого, а также на самом деле не поддерживает это достаточно. Обычно std::valarray<T>
является довольно специализированным классом, и он не используется в основном широко. Кроме того, я считаю, что аргументы шаблона для std::valarray<T>
являются ограниченным набором (например, числовыми встроенными типами).
С другой стороны, std::array<T, n>
представляет собой массив фиксированного размера, поддерживающий, насколько это возможно, фиксированный размер, нормальный интерфейс контейнера. По существу, std::array<T>
является более удобной для использования версией T[n]
.
Ответ 3
valarray
- динамическая структура данных, размер которой может меняться во время выполнения и которая выполняет динамическое распределение. array
- статическая структура данных, размер которой определяется во время компиляции (а также является агрегатом).
Не используйте valarray
, хотя; просто используйте vector
.