2015-12-01 33 views
1

我宣佈了一個鏈接列表的向量(並且鏈接列表中包含值爲int)。然後我試圖推的值到所述鏈表(i只是在載體中的位置):如何在C++中創建鏈表的向量?

vector< list<int> > linkedListVector; 
adjacencyVector[i].push_back(s); 

的問題是,我碰上段故障時我運行上述命令和我不知道爲什麼。我查閱了C++文檔,我的格式看起來正確。有任何想法嗎?

+4

什麼是向量的大小?它至少是i + 1嗎? – immibis

回答

0

如果您使用的是for循環,那麼你可能已經知道什麼最大規模將這樣你就可以只使用resize方法是這樣的:

adjacencyVector.resize(MAXSIZE) 
2

該向量從零開始,並且您必須在推入列表[i]之前創建向量元素。

如果您的i以正常方式進展,您可以先將push_back()放到矢量上,然後放到矢量的列表中。如果沒有,你可能會有點添加一些諸如醜如:

if (adjacencyVector.size() <= i) { adjacencyVector.resize(i + 1) ; } 
adjacencyVector[i].push_back(s); 
+0

你可以擴展我將如何做到這一點?我的矢量沒有固定的大小,我正在使用循環來推送正確的值。 –

+0

或者你可以'調整'或'保留'。 – erip

+0

@erip:'reserve()'不會創建實際的'list'對象,但是'resize()'會。 –

1

你要的list<int>一個實例添加到vector,那麼你可以通過索引訪問特定list<int>之前,那麼你就可以在list<int>調用push_back()。因此,無論push_back()一個list<int>到載體:

vector< list<int> > adjacencyVector; 

list<int> l; 
adjacencyVector.push_back(l); 
... 
adjacencyVector[0].push_back(s); 

或撥打矢量的resize()方法來一次添加多個列表:

vector< list<int> > adjacencyVector; 

adjacencyVector.resize(number of lists); 
... 
adjacencyVector[index].push_back(s); 
0

然後我試着將一個值推送到鏈表上。

您試圖訪問一個不存在的對象。 adjacencyVector [i]列表不存在,因爲adjacencyVector是一個空向量,如果你沒有放入一個元素。

以下示例將清楚說明一些細節。

#include <iostream> 
#include <vector> 
#include <list> 

int main() 
{ 
    std::vector<std::list<int> > v; // This statement creates an empty vector of lists of integers. 
    std::list<int> l; // This statement creates an empty list of integers. 
    for(int i=0; i<10; ++i){ 
     l.push_back(i); 
     v.push_back(l); 
    } 
    for(unsigned int i=0; i<v.size(); ++i){ // You can access elements calling the operator[]. 
     for(std::list<int>::iterator it=v[i].begin(); it!=v[i].end(); ++it){ 
      std::cout<<*it<<' '; // You can access elements calling the operator[] , you need an iterator. 
     } 
     std::cout<<std::endl; 
    } 
    //std::cout<<*(v[v.size()].begin())<<std::endl; // It causes segmentation fault, because v[10] does not exist, 
                // 10 is out of range of valid indexes. 
} 

向量和列表都退出類似。如果使用列表,插入和刪除更有效,但如果使用矢量,訪問元素通常更有效。