我如何std ::使用std :: string字段将字符串复制到结构

时间:2015-04-15 15:03:43

标签: c++ string c++11 struct std

我从一个文件中读取了很多记录到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;
}

在创建第一个结构体时,我遇到了分段错误。为什么?我知道,struct的字符串字段没有足够的空间。将类型更改为char fieldname[some size]可以解决问题,但它是C样式,我不想使用它。

如何为该示例分配空间?

1 个答案:

答案 0 :(得分:4)

您实际上并未在此处使用std::vector

stxxl::vector<Citizen> v;

正如STXXL FAQ中所述,stxxl::vector只能使用POD类型进行参数化。 std::string不是POD类型,也不是任何将其作为成员的结构。

如果您没有充分理由使用stxxl::vector,请使用std::vector。否则,您将被限制为POD类型,这可能意味着固定最大大小的C风格字符串。