我宣佈了一個鏈接列表的向量(並且鏈接列表中包含值爲int
)。然後我試圖推的值到所述鏈表(i
只是在載體中的位置):如何在C++中創建鏈表的向量?
vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);
的問題是,我碰上段故障時我運行上述命令和我不知道爲什麼。我查閱了C++文檔,我的格式看起來正確。有任何想法嗎?
我宣佈了一個鏈接列表的向量(並且鏈接列表中包含值爲int
)。然後我試圖推的值到所述鏈表(i
只是在載體中的位置):如何在C++中創建鏈表的向量?
vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);
的問題是,我碰上段故障時我運行上述命令和我不知道爲什麼。我查閱了C++文檔,我的格式看起來正確。有任何想法嗎?
如果您使用的是for循環,那麼你可能已經知道什麼最大規模將這樣你就可以只使用resize
方法是這樣的:
adjacencyVector.resize(MAXSIZE)
該向量從零開始,並且您必須在推入列表[i]
之前創建向量元素。
如果您的i
以正常方式進展,您可以先將push_back()
放到矢量上,然後放到矢量的列表中。如果沒有,你可能會有點添加一些諸如醜如:
if (adjacencyVector.size() <= i) { adjacencyVector.resize(i + 1) ; }
adjacencyVector[i].push_back(s);
你可以擴展我將如何做到這一點?我的矢量沒有固定的大小,我正在使用循環來推送正確的值。 –
或者你可以'調整'或'保留'。 – erip
@erip:'reserve()'不會創建實際的'list'對象,但是'resize()'會。 –
你要的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);
然後我試着將一個值推送到鏈表上。
您試圖訪問一個不存在的對象。 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.
}
向量和列表都退出類似。如果使用列表,插入和刪除更有效,但如果使用矢量,訪問元素通常更有效。
什麼是向量的大小?它至少是i + 1嗎? – immibis