[英]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.