Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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.