[問題] STL(Vector, List) push_back失效?
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
STL
餵入的資料(Input):
我想要從文字檔讀入下列格式的資料
1 5 2 3 8
由左至右為: 編號1的顧客的交易編號為2, 交易長度為2(有兩筆資料) 資料分別為 5, 8
程式碼(Code):(請善用置底文網頁, 記得排版)
先宣告
struct Node
{
int Customer; //顧客編號
vector <int> Data; //存放顧客交易資料
};
struct TransList
{
int Transaction; //交易編號
int Length; //交易長度
int *item; //交易資料
}:
struct Node *ShowPtr;
struct TransList *List1;
首先建一個Node來儲存顧客的交易資料, 接著從文字檔中讀入資料
inFile.read ((char*) &List1->Transaction, sizeof (int)); // 第N筆資料
inFile.read ((char*) &List1->Length, sizeof (int)); // 有資料長度為M
List1->item = (int*) calloc (List1->Length, sizeof(int));
for (i = 0 ; i < List1->Length; a++)
{
inFile.read ((char*) &List1->item[i], sizeof (int)); // 資料
}
故此時應為 List1->Transaction = 5, List1->Length = 2, List1->item[0] = 3,
List1->item[1] = 8
-----------------------------------------------------------------------------------------------------------------------
主要問題是這部分, 準備用另一個副程式存入顧客的Vector
ShowPtr->Data.reserve(50); // 因push_back或erase會使iterators失效, 所以先預設
容量, 以防iterators失效
vector <int> ::iterator ivec1;
while (List1 != NULL)
{
for (int i = 0; i < 該顧客有幾筆交易; i++) // 假設只有一筆交易
{
for (int j= 0; j < List1->Length ; j++)
{
ShowPtr->Data.push_back(List1->item[j]);
}
ShowPtr->Data.push_back(-1); // 用來表示第一筆交易讀完
}
ShowPtr->Data.push_back(-2); // 用來表示 該顧客交易全讀完
}
所以顧客的Vector 應存放著 3 8 -1 -2
然後我用ivec1指向ShowPtr->Data.begin(); 此時*ivec1 應為 3
卻還是出現iterators失效, 我有先預設容量可放50筆資料, 目前只放4筆(3 8 -1 -2) 照
理Vector不用重新分配記憶體, 但iterators卻還是失效
補充說明(Supplement):
另外後來想改用List (想說不用擔心iterators失效的問題), 反而還出現0xC0000005「違
反記憶體使用權」的錯誤的產生
以上兩個問題, 勞請各位版友解惑了...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.134.18.157
→
01/28 16:06, , 1F
01/28 16:06, 1F
→
01/28 16:06, , 2F
01/28 16:06, 2F
→
01/28 16:15, , 3F
01/28 16:15, 3F
→
01/28 16:28, , 4F
01/28 16:28, 4F
→
01/28 16:29, , 5F
01/28 16:29, 5F
→
01/28 16:31, , 6F
01/28 16:31, 6F
→
01/28 16:44, , 7F
01/28 16:44, 7F
→
01/28 16:52, , 8F
01/28 16:52, 8F
→
01/28 16:53, , 9F
01/28 16:53, 9F
推
01/28 16:58, , 10F
01/28 16:58, 10F
→
01/28 16:59, , 11F
01/28 16:59, 11F
→
01/28 17:07, , 12F
01/28 17:07, 12F
→
01/28 17:38, , 13F
01/28 17:38, 13F
→
01/28 18:10, , 14F
01/28 18:10, 14F
→
01/28 18:11, , 15F
01/28 18:11, 15F
→
01/28 18:11, , 16F
01/28 18:11, 16F
※ 編輯: BearTsao 來自: 140.134.18.155 (01/28 18:25)
→
01/28 18:26, , 17F
01/28 18:26, 17F
→
01/28 18:33, , 18F
01/28 18:33, 18F
→
01/28 19:11, , 19F
01/28 19:11, 19F
→
01/28 19:14, , 20F
01/28 19:14, 20F
→
01/28 19:14, , 21F
01/28 19:14, 21F
→
01/28 19:15, , 22F
01/28 19:15, 22F
→
01/28 20:09, , 23F
01/28 20:09, 23F
→
01/28 20:30, , 24F
01/28 20:30, 24F
→
01/28 20:34, , 25F
01/28 20:34, 25F
→
01/28 20:34, , 26F
01/28 20:34, 26F
→
01/29 17:03, , 27F
01/29 17:03, 27F