[英]How do you create a vector of linked lists in C++?
我聲明了鏈表的向量(鏈表包含int
值)。 然后,我嘗試將值推入鏈表( i
只是向量中的一個位置):
vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);
問題是當我運行上述命令時我遇到了分段錯誤,但我不知道為什么。 我查閱了C ++文檔,並且格式看起來正確。 有任何想法嗎?
向量從零開始,您必須先創建向量元素,然后再推入[i]
的列表。
如果您的i
以正常方式前進,則可以先將push_back()
拖到矢量上,然后push_back()
到矢量列表中。 如果沒有,您可以添加一些難看的東西,例如:
if ( adjacencyVector.size() <= i ) { adjacencyVector.resize(i + 1) ; }
adjacencyVector[i].push_back(s);
您必須在vector
添加list<int>
的實例,然后才能通過索引訪問特定的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);
如果您使用的是for循環,那么您可能已經知道最大大小了,因此可以使用如下的resize
方法:
adjacencyVector.resize(MAXSIZE)
然后,我嘗試將值推入鏈表。
您試圖訪問一個不存在的對象。 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.
}
向量和列表的退出類似。 如果使用列表,則插入和刪除更為有效,但如果使用矢量,則訪問元素通常更為有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.