打印出载有我个人信息的矢量时遇到问题。
struct PersonInfo{
string name;
vector<string> phones;
};
int main(){
string line, word;
vector<PersonInfo> people;
while(getline(cin, line)){
PersonInfo info;
istringstream record(line);
record >> info.name;
while(record >> word)
info.phones.push_back(word);
people.push_back(info);
}
for(auto i = people.begin(); i != people.end(); i++)
cout << people << endl;
return 0;
}
答案 0 :(得分:1)
error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
cout << people << endl;
^
您需要为自定义结构定义<<
运算符。在结构之后定义它
ostream & operator<<(ostream & out, const PersonInfo & p) {
out << p.name << endl;
copy(p.phones.begin(), p.phones.end(), ostream_iterator<string>(out, " "));
return out;
}
并更正您的打印声明
for (auto i : people)
cout << i << endl;
请参阅http://ideone.com/uLSLHY的工作演示。
答案 1 :(得分:0)
有几种选择:
使用迭代器
for(auto i = people.begin(); i != people.end(); i++)
{
cout << i->name<< endl;
for ( auto l= i->phones.begin(); l != i->phones.end(); ++l)
std::cout<< *l<<"\n";
}
使用范围循环
for ( auto & val: people)
{
std::cout<<val.name<<"\n";
for ( auto & phone: val.phones)
std::cout<<phone;
}
您可以使用向量索引,留给您作为家庭作业
答案 2 :(得分:0)
for(int i = 0 ; i < people.size(); i++){
cout << people[i].name<< endl;
for(int j = 0 ;j<people[i].phones.size() ; j++)
cout<< people[i].phones[j]<<" ";
cout<<endl;
}
这里使用第一个循环,我们迭代直到矢量人的大小,并且矢量人物中的每个内容都有另一个名为phone的矢量,所以我们也需要迭代那个。我们在第二个循环中做到了这一点。
因此,如果人[0]的手机大小为10,那么我们将迭代
人[0]。手机[10]等等..