我想用C++編寫一個程序來讀取一個文件,其中每個字段之前都會有一個數字,表示它有多長。如何在C++程序中使用長度指示器
問題是我讀了一個類的對象中的每個記錄;我如何使這個類的屬性動態化?
例如,如果字段是「john」,它將以4個字符的數組讀取它。
我不想製作1000個元素的數組,因爲最小內存使用量非常重要。
我想用C++編寫一個程序來讀取一個文件,其中每個字段之前都會有一個數字,表示它有多長。如何在C++程序中使用長度指示器
問題是我讀了一個類的對象中的每個記錄;我如何使這個類的屬性動態化?
例如,如果字段是「john」,它將以4個字符的數組讀取它。
我不想製作1000個元素的數組,因爲最小內存使用量非常重要。
爲了做到這一點,您需要使用動態分配(直接或間接)。
如果直接,需要new[]
和delete[]
:
char *buffer = new char[length + 1]; // +1 if you want a terminating NUL byte
// and later
delete[] buffer;
如果你被允許使用升壓,可以簡化一點用boost::shared_array<>
。隨着shared_array,您不必手動刪除存儲器陣列封裝會照顧的,對你:
boost::shared_array<char> buffer(new char[length + 1]);
最後,你可以通過像std::string
或std::vector<char>
類間接做動態分配。
使用std::string
,這將調整大到足以容納您分配給它的內容。
如果你只是想從文件中讀取的一字一句,你可以這樣做:
vector<string> words;
ifstream fin("words.txt");
string s;
while(fin >> s) {
words.push_back(s);
}
這將會把文件中的所有單詞到載體words
,雖然你將失去的空白。
我想在記錄之間沒有空格,或者你只需要在一個循環中寫入file >> record
。
size_t cnt;
while (in >> cnt) { // parse number, needs not be followed by whitespace
string data(cnt, 0); // perform just one malloc
in.get(data[0], cnt); // typically perform just one memcpy
// do something with data
}