2015-07-12 87 views
-4

我有问题打印出载有我的人信息的矢量。如何打印矢量类的内容

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

您是否尝试搜索所有如何在C++中打印对象?并看看你的'声明'。如果你从不在循环体内使用它,那么为'vector'创建一个迭代器有什么意义呢? – Praetorian

回答

0

有几种选择:

  1. 使用迭代器

    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"; 
    } 
    
  2. 使用范围循环

    for (auto & val: people) 
    { 
        std::cout<<val.name<<"\n"; 
        for (auto & phone: val.phones) 
         std::cout<<phone; 
    } 
    
  3. 您可以使用矢量指数,留给你的在家工作

+0

您的示例错误标记。 – celticminstrel

+0

迭代器错误的运算符 – 2015-07-12 09:15:42

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;  
} 

在这里,在使用第一循环我们遍历直到矢量人的大小和每个矢量人的内容有另一个手机载体命名的,所以我们需要遍历一个了。我们在第二个循环中做了这个。

因此,如果人[0]有手机尺寸为10,然后我们会遍历

人[0] .phones [10]等..

+1

给答案添加一点解释会使它更好的回答。 – NathanOliver

+0

谢谢Nathan :) –

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工作演示。