繁体   English   中英

我如何将std :: string复制到带有std :: string字段的结构中

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

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