2014-02-24 26 views
0

所以我想寫一個函數,它需要兩個參數,list<item> myListint num_items,並創建一個新列表的向量。每個項目都有數據成員標識,這是項目應添加到的列表向量中的索引。任何項目的ID都保證不大於(num_items - 1)。這裏是我的代碼:向量的列表

vector<list<item>> createVector(list<item> myList, int num_items) { 
    vector<list<item>> myVector; 
    myVector.reserve(num_items); 

    for(item& i : myList) 
     myVector[i.ID].push_back(i); 

    return myVector; 
} 

這是造成分段錯誤,每當我打電話的push_back()到項目的載體添加到列表中。我知道如何使用指針實現函數,但函數返回的類型必須是實際的列表向量而不是指向它們的指針,所以我不能使用動態內存分配。任何幫助將不勝感激。謝謝。

回答

0

reserve只爲該向量元素保留空間;它不會創建任何元素,因此您無法訪問它們。您想使用resize(或者只是將大小作爲構造函數參數傳遞),以使用有效的空列表填充矢量。

2

reserve()只是分配一塊內存。它不創建您打電話給push_back()list對象。您需要使用resize()而不是reserve()來創建它們:

myVector.resize(num_items); 

或者更好的,通過計數的構造,而不是直接:

vector<list<item>> myVector(num_items);