【发布时间】:2021-11-06 19:32:23
【问题描述】:
在下面的程序中,我创建了 3 个 Person 类的对象,并将该对象推送到向量容器中。之后,使用基于范围的 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
提前致谢。
【问题讨论】:
-
vector<Person> per(3);创建一个包含 3 个默认初始化的Person的vector。 -
vector<Person> per(3);这里的 3 将向量初始化为 3 的大小,并用 3 个对象填充它。这不是必需的,向量会随着每个push_back增长。 -
将
vector<Person> per(3);替换为vector<Person> per;将解决您的问题 -
你想要
/*const*/ std::vector<Person> per{p1, p2, p3}; -
删除
Person的默认构造函数可能有助于查明问题。