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.