繁体   English   中英

如何在C ++中创建链接列表的向量?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM