如何在C++中创建一个链表向量
How do you create a vector of linked lists in C++?
我声明了链表的向量(链表包含int
值)。然后我尝试将一个值推到链表上(i
只是矢量中的一个位置):
vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);
问题是,当我运行上面的命令时,我遇到了一个分段错误,我不知道为什么。我查阅了C++文档,我的格式看起来是正确的。有什么想法吗?
您必须将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);
矢量从零开始,在[i]
处推到列表之前必须创建矢量元素。
如果你的i
以正常的方式进行,你可以先将push_back()
放到向量上,然后放到向量中的列表上。如果没有,你可以添加一些丑陋的东西,比如:
if ( adjacencyVector.size() <= i ) { adjacencyVector.resize(i + 1) ; }
adjacencyVector[i].push_back(s);
如果您正在使用for循环,那么您可能已经知道最大大小,因此您可以使用resize
方法,如下所示:
adjacencyVector.resize(MAXSIZE)
然后我尝试将一个值推送到链表中。
您试图访问一个不存在的对象。邻接向量[i]列表不存在,因为如果你没有将元素放入其中,邻接向量是一个空向量。
下面的例子将使一些细节变得清晰。
#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.
}
矢量和列表非常相似。若使用list,则插入和删除更有效,但若使用vector,则访问元素通常更有效。
相关文章:
- 链表,将列表复制到另一个列表
- 检查注册表项是否链接到(或副本)另一个注册表项
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 如何在 c++ 中比较 2 个链表并将匹配的数据放入另一个链表中
- 创建了一个链表,但如何删除 c++ 中的"所有"节点
- C++:如何做一个链表,结构作为参数传递?
- 程序的输出不是来的,它是一个链表程序
- C++创建一个链表,每个节点有超过 2 个字段
- 将 2 个链表中包含的相同值写入另一个链表
- 创建一个链表,每个节点指向另一个链表
- C++-将链表(A)插入另一个链表(B)的位置n
- 如何将一个链表插入另一个链表后面
- 为什么当我制作一个链表时,我的电脑会崩溃
- 如何在C++中创建一个链表向量
- 另一个链表中的链表
- c++制作一个链表的深层副本
- 按第一个值和第二个值将输入排序到一个链表中
- C++使用递归函数创建一个链表
- 我可以用花括号构造一个链表吗?
- (c++)读取CSV文件并使用信息创建对象(这将成为一个链表)