2015-04-15 56 views
0

我從文件中大量記錄讀入一個std一個struct ::矢量這樣的:我怎樣的std ::字符串複製與的std :: string領域

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風格,我不想使用它。

如何爲該示例分配空間?

+0

沒有必要分配空間,'>>'會正確調整字符串的大小。問題在別的地方。你有'std :: vector'的問題嗎?你可以將問題簡化爲[最小但完整的測試用例](http://stackoverflow.com/help/mcve)?您是否使用過調試器來查看導致段錯誤的原因? –

回答

4

你實際上並沒有使用std::vector這裏:

stxxl::vector<Citizen> v; 

,因爲它說的STXXL FAQstxxl::vector只能與POD類型參數化。 std::string不是POD類型,也不是任何將其作爲成員的結構。

如果您沒有足夠的理由使用stxxl::vector,請使用std::vector。否則,您只能使用POD類型,這可能意味着固定最大大小的C風格字符串。

相關問題