inicializar um vetor para zeros C ++ / C ++ 11

117

Eu sei que em C ++ 11 eles adicionaram o recurso para inicializar uma variável para zero como tal

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

Existe uma maneira semelhante de inicializar um std::vectorde comprimento fixo para todos os zeros?

pyCthon
fonte
13
std::vector<int> vec(42);
avakar
9
btw, isso não é novo no c ++ 11, você pode fazer isso nas versões anteriores também
balki

Respostas:

219

Você não precisa de listas de inicialização para isso:

std::vector<int> vector1(length, 0);
std::vector<double> vector2(length, 0.0);
ronag
fonte
37
Você não precisa declarar explicitamente o 0, precisa? só vector(length)deve funcionar?
Daniel Gratzer
37
@jozefg: Sim, funcionaria, embora não haja nenhum mal em ser explícito sobre o que você deseja que o código faça.
ronag
1
@ronag eu escrevi minha própria resposta porque ser explícito nesse caso não é necessariamente um bom exemplo se int não for o tipo com o qual ele está trabalhando. A programação gereral está disponível em c ++, mas quando fui lembrado de que você pode omitir o argumento por completo, removi minha resposta.
Johannes Schaub - litb
1
Um vetor é inicializado em 0 automaticamente, a menos que você especifique algum outro valor na declaração, como o ronag mostrou.
Nikos
É possível reinicializar todos os elementos do Global Vector ZEROcom eficiência sem usar loops for ??????
Ankit Mishra
0

A inicialização de um vetor com estrutura, classe ou união pode ser feita desta forma

std::vector<SomeStruct> someStructVect(length);
memset(someStructVect.data(), 0, sizeof(SomeStruct)*length);
Dexter
fonte