我从一个文件中读取了很多记录到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样式,我不想使用它。
如何为该示例分配空间?
答案 0 :(得分:4)
您实际上并未在此处使用std::vector
:
stxxl::vector<Citizen> v;
正如STXXL FAQ中所述,stxxl::vector
只能使用POD类型进行参数化。 std::string
不是POD类型,也不是任何将其作为成员的结构。
如果您没有充分理由使用stxxl::vector
,请使用std::vector
。否则,您将被限制为POD类型,这可能意味着固定最大大小的C风格字符串。