Есть ли эквивалент memset для std::array
? Я думаю, что memset
должен работать лучше при инициализации массива до нуля, чем при цикле по массиву. Я искал один для std::array
, но ничего не смог найти в Интернете.
Есть ли эквивалент std::memset для std::array?
Ответы (1)
Используйте метод массива fill()
, в этом его цель.
Если вы заполните его 0
(например, для целых чисел), то компилятор может оптимизировать его, если сможет (часто так и происходит, вы можете посмотреть на сгенерированный код).
person
Matthieu Brucher
schedule
02.12.2018
И если в досовременном С++, в котором не было
std::array
, а тем более std::array::fill
, вы можете заполнить все, что у вас есть два итератора, с помощью std::fill
из <algorithms>
, и хорошая реализация будет иметь специализацию для разных типов итераторов и типов значений, чтобы она могла быть очень эффективным. (И это будет работать и с std::array
.)
- person davidbak; 02.12.2018
memset
, потому что он не будет работать для любого типаT
, который не является POD. Это относится не только кstd::array<T, n>
, но и к любому контейнеру, основанному на универсальном типеT
. - person PaulMcKenzie   schedule 02.12.2018memset
, основанный наstd::is_pod<T>::value
, хотя… (должен отметить, чтоis_pod
запланировано как устаревание в C++20.) - person Arne Vogel   schedule 06.12.2018