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

Std:: array vs array performance

Если я хочу построить очень простой массив, например

int myArray[3] = {1,2,3};

Следует ли вместо этого использовать std::array?

std::array<int, 3> a = {{1, 2, 3}};

В чем преимущества использования std:: array над обычными? Является ли это более результативным? Просто проще справиться с копированием/доступом?

4b9b3361

Ответ 1

В чем преимущества использования std::array по сравнению с обычными?

У этого есть дружественная семантика значения, так что он может быть передан или возвращен из функций по значению. Его интерфейс упрощает поиск размера и использует алгоритмы, основанные на стилете STL.

Является ли это более эффективным?

Он должен быть точно таким же. По определению, это простой агрегат, содержащий массив как его единственный член.

Просто проще справиться с копированием/доступом?

Да.

Ответ 2

A std::array - очень тонкая оболочка вокруг массива C-стиля, в основном определяемая как

template<typename T, size_t N>
class array
{
public:
    T _data[N];
    T& operator[](size_t);
    const T& operator[](size_t) const;
    // other member functions and typedefs
}

Это aggregate, и он позволяет использовать его почти как фундаментальный тип (т.е. вы можете передавать по значению, присваивать и т.д., тогда как стандартный массив C не может быть назначен или скопирован непосредственно в другой массив). Вы должны взглянуть на некоторую стандартную реализацию (перейти к определению из вашей любимой среды IDE или непосредственно открыть <array>), это часть стандартной библиотеки С++, которую довольно легко читать и понимать.

Ответ 3

std::array предназначен как обертка с нулевым обложением для массивов C, которая дает ему "нормальное" значение, такое как семантика других контейнеров на С++.

Вы не должны замечать каких-либо различий в производительности во время работы, пока получаете доступ к дополнительным функциям.

Использование std::array вместо int[] массивов стилей - хорошая идея, если у вас есть С++ 11 или boost под рукой.

Ответ 4

std::array имеет семантику значений, а необработанные массивы - нет. Это означает, что вы можете скопировать std::array и рассматривать его как примитивное значение. Вы можете получить их по значению или ссылке в качестве аргументов функции, и вы можете вернуть их по значению.

Если вы никогда не копируете std::array, тогда нет разницы в производительности, чем необработанный массив. Если вам нужно сделать копии, то std::array выполнит правильную работу и все равно даст равную производительность.