construção padrão de elementos em um vetor
-
22-08-2019 - |
Pergunta
Ao ler as respostas a esta Eu tenho uma dúvida quanto à construção padrão dos objetos do vetor. Para testá-lo eu escrevi o seguinte código de teste:
struct Test
{
int m_n;
Test();
Test(const Test& t);
Test& operator=(const Test& t);
};
Test::Test() : m_n(0)
{
}
Test::Test(const Test& t)
{
m_n = t.m_n;
}
Test& Test::operator =(const Test& t)
{
m_n = t.m_n;
return *this;
}
int main(int argc,char *argv[])
{
std::vector<Test> a(10);
for(int i = 0; i < a.size(); ++i)
{
cout<<a[i].m_n<<"\n";
}
return 0;
}
E com certeza, o Teste de estruturas construtor padrão é chamado durante a criação do objeto vetorial. Mas o que eu não sou capaz de entender é como é que o STL inicializar os objetos criar um vetor de tipo de dados básicos, como vector de inteiros desde há construtor padrão para isso? ou seja, como é que todos os ints no vetor de ter valor 0? não deveria ser lixo?
Solução
Ele usa o equivalente do construtor padrão para ints, que é a zero Inicializar eles. Você pode fazê-lo explicitamente:
int n = int();
irá definir n para zero.
Note que a construção padrão é utilizado apenas e necessário se o vector é dado um tamanho inicial. Se você disse:
vector <X> v;
não há nenhuma exigência de que X tem um construtor padrão.
Outras dicas
std::vector<Type> a(10); // T could be userdefined or basic data type
Vector basicamente chama default
para o tipo para o qual ele aponta: Type()
- se é tipo de dados básicos como int, dupla estão lá, então int (), double () {int () terá valor 0}
- Se o tipo de dados definidos pelo usuário, em seguida, construtor padrão seria chamado.