Есть ли эквивалент std::memset для std::array?

Есть ли эквивалент memset для std::array? Я думаю, что memset должен работать лучше при инициализации массива до нуля, чем при цикле по массиву. Я искал один для std::array, но ничего не смог найти в Интернете.


person nmd_07    schedule 02.12.2018    source источник
comment
Дело в том, что вы не найдете memset, потому что он не будет работать для любого типа T, который не является POD. Это относится не только к std::array<T, n>, но и к любому контейнеру, основанному на универсальном типе T.   -  person PaulMcKenzie    schedule 02.12.2018
comment
@PaulMcKenzie Можно было бы условно включить метод memset, основанный на std::is_pod<T>::value, хотя… (должен отметить, что is_pod запланировано как устаревание в C++20.)   -  person Arne Vogel    schedule 06.12.2018


Ответы (1)


Используйте метод массива fill(), в этом его цель.

Если вы заполните его 0 (например, для целых чисел), то компилятор может оптимизировать его, если сможет (часто так и происходит, вы можете посмотреть на сгенерированный код).

person Matthieu Brucher    schedule 02.12.2018
comment
И если в досовременном С++, в котором не было std::array, а тем более std::array::fill, вы можете заполнить все, что у вас есть два итератора, с помощью std::fill из <algorithms>, и хорошая реализация будет иметь специализацию для разных типов итераторов и типов значений, чтобы она могла быть очень эффективным. (И это будет работать и с std::array.) - person davidbak; 02.12.2018