为什么 vector push_back 在 C++ 中调用两次?
Why vector push_back call twice in C++?
在下面的程序中,我创建了 class Person 的 3 个对象,并将该对象推送到 vector 容器中。之后,使用基于范围的 for 循环调用显示函数并打印姓名和年龄。
#include <iostream>
#include <vector>
#include <iterator>
#include <functional>
using namespace std;
class Person
{
private:
string _name;
int _age;
public:
Person()
{
}
Person(string name, int age) : _name(name), _age(age)
{
}
void Display()
{
cout<<"_name : "<<_name<<" => "<<"_age : "<<_age<<endl;
}
};
int main()
{
Person p1("User1", 20);
Person p2("User2", 30);
Person p3("User3", 25);
vector<Person> per(3);
per.push_back(p1);
per.push_back(p2);
per.push_back(p3);
for(auto obj : per)
{
obj.Display();
}
}
但我不明白我在这里缺少什么来获得输出
_name : => _age : -1
_name : => _age : -1
_name : => _age : -1
_name : User1 => _age : 20
_name : User2 => _age : 30
_name : User3 => _age : 25
而不是
_name : User1 => _age : 20
_name : User2 => _age : 30
_name : User3 => _age : 25
提前致谢。
您正在创建一个大小为 3 的向量,之后,您要向该向量添加另外 3 个元素。插入 3 个人后,尝试打印出向量中存储的元素数 (per.size()
)。
定义向量时:
vector<Person> per(3);
您将大小设置为 3
,这意味着将创建三个默认构造的元素并将其添加到向量中。
然后再添加三个,因此向量中总共有六个元素。
如果你只想要你的三个元素,有几个选择:
只保留内存,不设置大小:
vector<Person> per;
per.reserve(3); // Allocates memory for 3 elements, doesn't set the size
per.push_back(p1);
per.push_back(p2);
per.push_back(p3);
不要反推,使用索引设置元素:
vector<Person> per(3);
per[0] = p1;
per[1] = p2;
per[2] = p3;
用你想要的元素初始化向量:
vector<Person> per = {
{ "User1", 20 },
{ "User2", 30 },
{ "User3", 25 }
};
在下面的程序中,我创建了 class Person 的 3 个对象,并将该对象推送到 vector 容器中。之后,使用基于范围的 for 循环调用显示函数并打印姓名和年龄。
#include <iostream>
#include <vector>
#include <iterator>
#include <functional>
using namespace std;
class Person
{
private:
string _name;
int _age;
public:
Person()
{
}
Person(string name, int age) : _name(name), _age(age)
{
}
void Display()
{
cout<<"_name : "<<_name<<" => "<<"_age : "<<_age<<endl;
}
};
int main()
{
Person p1("User1", 20);
Person p2("User2", 30);
Person p3("User3", 25);
vector<Person> per(3);
per.push_back(p1);
per.push_back(p2);
per.push_back(p3);
for(auto obj : per)
{
obj.Display();
}
}
但我不明白我在这里缺少什么来获得输出
_name : => _age : -1
_name : => _age : -1
_name : => _age : -1
_name : User1 => _age : 20
_name : User2 => _age : 30
_name : User3 => _age : 25
而不是
_name : User1 => _age : 20
_name : User2 => _age : 30
_name : User3 => _age : 25
提前致谢。
您正在创建一个大小为 3 的向量,之后,您要向该向量添加另外 3 个元素。插入 3 个人后,尝试打印出向量中存储的元素数 (per.size()
)。
定义向量时:
vector<Person> per(3);
您将大小设置为 3
,这意味着将创建三个默认构造的元素并将其添加到向量中。
然后再添加三个,因此向量中总共有六个元素。
如果你只想要你的三个元素,有几个选择:
只保留内存,不设置大小:
vector<Person> per; per.reserve(3); // Allocates memory for 3 elements, doesn't set the size per.push_back(p1); per.push_back(p2); per.push_back(p3);
不要反推,使用索引设置元素:
vector<Person> per(3); per[0] = p1; per[1] = p2; per[2] = p3;
用你想要的元素初始化向量:
vector<Person> per = { { "User1", 20 }, { "User2", 30 }, { "User3", 25 } };