инициализировать вектор нулями C ++ / C ++ 11


118

Я знаю, что в C ++ 11 добавлена ​​функция инициализации переменной нулем как таковой.

double number = {}; // number = 0
int data{};  // data = 0

Есть ли аналогичный способ инициализировать std::vectora фиксированной длины всеми нулями?


13
std::vector<int> vec(42);
avakar

9
кстати, это не
новость

Ответы:


221

Для этого вам не нужны списки инициализации:

std::vector<int> vector1(length, 0);
std::vector<double> vector2(length, 0.0);

37
Вам не нужно явно указывать 0, не так ли? просто vector(length)должно работать?
Даниэль Гратцер

38
@jozefg: Да, это сработает, хотя нет ничего плохого в том, чтобы четко указать, что вы хотите от кода.
ronag

1
@ronag я написал свой ответ, потому что явное выражение в этом случае не обязательно является хорошим примером, если int - это не тот тип, с которым он работает. Общее программирование доступно на C ++, но когда мне напомнили, что аргумент можно вообще опустить, я удалил свой ответ.
Йоханнес Шауб - лит

1
Вектор автоматически инициализируется значением 0, если вы не укажете другое значение в объявлении, как показал ronag.
Nikos

Можно ли повторно инициализировать весь элемент Global Vector с помощью ZEROwith эффективно без использования циклов for ??????
Анкит Мишра

0

Инициализация вектора, имеющего структуру, класс или союз, может быть выполнена таким образом

std::vector<SomeStruct> someStructVect(length);
memset(someStructVect.data(), 0, sizeof(SomeStruct)*length);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.