如何打印矢量类类型的内容

时间:2015-07-12 00:42:33

标签: c++ class vector

打印出载有我个人信息的矢量时遇到问题。

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

3 个答案:

答案 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)

有几种选择:

  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. 您可以使用向量索引,留给您作为家庭作业

答案 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]等等..