如何才能将字符串复制到带有 std::string 字段的结构中

How can I std::copy a string to a struct with the std::string fields

本文关键字:string std 字段 结构 字符串 复制      更新时间:2023-10-16

我从一个文件中读取了很多记录到一个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 中所述,stxxl::vector只能使用 POD 类型进行参数化。 std::string不是 POD 类型,也不是任何将其作为成员的结构。

如果您没有充分的理由使用 stxxl::vector ,请使用 std::vector 。否则,只能使用 POD 类型,这可能意味着固定最大大小的 C 样式字符串。