繁体   English   中英

在向量中打印结构的成员字符串以输出流

[英]printing member string of a structure in a vector to cout stream

打印存储在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 ;
    }

}

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

无效getstring(const char * msg, std :: string& storage)

应该建议也将(*it).s1更改为it->s1

试试这个修改:

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

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM