[英]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.