从向量到cout流的向量中的结构的打印成员字符串

时间:2014-07-18 19:08:29

标签: c++ vector

打印存储在vector中的结构的成员字符串的最佳方法是什么,我试图使用向量的const_iterator获取字符串,但结果只是类构造函数的初始值(空字符串) )。提前致谢

#include <vector>
#include <string>
#include <iostream>
#include <cstdio>

class X
{

public:
    std::string s1 , s2, s3 ;
    X()
    {
        s1 = " " ;
        s2 = " " ;
        s3 = " " ;
    }

};

void getstring(const char* msg , std::string storage)
{
    std::cout << msg ;
    std::getline(std::cin,storage) ;

}

int main()
{
    std::vector<X>data ;
    std::vector<X>::const_iterator it ;

    int register_no ;
    std::cout << "Enter Registers No. : " ;
    std::cin>>register_no;

    X temp ;

    for (int i = 0 ; i < register_no ; i++)
    {

        getchar();

        getstring("Enter s1 : " , temp.s1);
        getstring("Enter s2 : " , temp.s2) ;
        getstring("Enter s3 : " , temp.s3) ;

        data.push_back(temp) ;
    }

    for (it=data.begin() ; it != data.end(); ++it)
    {
        //following code is not effective:
        std::cout << (*it).s1 << std::endl ;
        std::cout << (*it).s2 << std::endl ;
        std::cout << (*it).s3 << std::endl ;
    }

}

2 个答案:

答案 0 :(得分:0)

为此传递字符串,读取值是存储在方法getstring的局部变量字符串中。

void getstring(const char * msg, std :: string&amp; 存储)

建议还应更改(*it).s1的{​​{1}}。

答案 1 :(得分:0)

尝试此修改:

void getstring(const char* msg , std::string& storage)
{
    std::cout << msg ;
    std::getline(std::cin,storage) ;

}

注意:使字符串参数成为引用以便复制到成员。如果参数未声明为引用,则参数将“按值”传递,这意味着参数将复制到函数内部,并且当函数返回时参数将被删除。