ініціалізувати вектор до нулів C ++ / C ++ 11


118

Я знаю, що в C ++ 11 вони додали функцію ініціалізації змінної до нуля як такої

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

Чи існує подібний спосіб ініціалізації std::vectorфіксованої довжини до всіх нульових?


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

9
btw, це не нове в c ++ 11, це можна зробити і в попередніх версіях
balki

Відповіді:


220

Для цього вам не потрібні списки ініціалізації:

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.
Нікос

Чи можливо повторно ініціалізувати весь елемент Global Vector ZEROз ефективно, не використовуючи для циклів ??????
Анкіт Мішра

0

Ініціалізація вектора, що має структуру, клас чи союз, може бути зроблена таким чином

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