[英]How can I std::copy a string to a struct with the std::string fields
我从文件中将很多记录读入到std :: vector中,如下所示:
std::fstream in("storage.txt", std::ios::in);
stxxl::vector<Citizen> v;
std::copy(std::istream_iterator<Citizen>(in), std::istream_iterator<Citizen>(), std::back_inserter(v));
Citizen
结构被定义为:
struct Citizen
{
std::string firstname, lastname;
int year;
};
该函数是为isteam_iterator
创建的:
std::istream& operator >>(std::istream& i, Citizen& c)
{
i >> c.firstname >> c.lastname >> c.year;
return i;
}
在创建第一个结构的过程中,我遇到了分段错误。 为什么? 我知道,结构的字符串字段没有足够的空间。 将类型更改为char fieldname[some size]
可解决此问题,但这是C样式,我不想使用它。
如何为该示例分配空间?
您实际上不是在这里使用std::vector
:
stxxl::vector<Citizen> v;
就像在STXXL FAQ中所说的那样 ,只能使用POD类型对stxxl::vector
进行参数设置。 std::string
不是POD类型,也没有将其作为成员的任何结构。
如果没有充分的理由使用stxxl::vector
,请使用std::vector
。 否则,您将只能使用POD类型,这可能意味着固定最大大小的C样式字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.