C++ 如何在C++;?

C++ 如何在C++;?,c++,vector,linked-list,C++,Vector,Linked List,我声明了一个链表向量(链表包含int值)。然后我尝试将一个值推送到链表上(I只是向量中的一个位置): vectorlinkedListVector; 邻接向量[i]。向后推; 问题是,当我运行上面的命令时,我遇到了分段错误,我不知道为什么。我查阅了C++文档,我的格式看起来是正确的。有什么想法吗?向量以零开始,您必须先创建向量元素,然后才能在[i]上推到列表中 如果你的i进展正常,你可以push_back()。如果没有,您可以添加一些有点难看的内容,例如: if ( adjacencyVect

我声明了一个链表向量(链表包含
int
值)。然后我尝试将一个值推送到链表上(
I
只是向量中的一个位置):

vectorlinkedListVector;
邻接向量[i]。向后推;

问题是,当我运行上面的命令时,我遇到了分段错误,我不知道为什么。我查阅了C++文档,我的格式看起来是正确的。有什么想法吗?

向量以零开始,您必须先创建向量元素,然后才能在
[i]
上推到列表中

如果你的
i
进展正常,你可以
push_back()。如果没有,您可以添加一些有点难看的内容,例如:

if ( adjacencyVector.size() <= i ) { adjacencyVector.resize(i + 1) ; }
adjacencyVector[i].push_back(s);

if(adjacencyVector.size()向量开始时的大小为零,您必须先创建向量元素,然后才能在
[i]
上推到列表中

如果你的
i
进展正常,你可以
push_back()

if ( adjacencyVector.size() <= i ) { adjacencyVector.resize(i + 1) ; }
adjacencyVector[i].push_back(s);

if(adjacencyVector.size()在通过索引访问特定的
列表之前,您必须向
向量添加
列表的一个实例
,然后您可以调用
列表上的
push_back()
。因此,要么
push_back()
列表
放入向量中:

vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);
vector< list<int> > adjacencyVector;

list<int> l;
adjacencyVector.push_back(l);
...
adjacencyVector[0].push_back(s);

您必须先将
列表
的实例添加到
向量
中,然后才能通过索引访问特定的
列表
,然后可以调用
列表
上的
push_back()
。因此,要么
push_back()
列表
进入向量:

vector< list<int> > linkedListVector;
adjacencyVector[i].push_back(s);
vector< list<int> > adjacencyVector;

list<int> l;
adjacencyVector.push_back(l);
...
adjacencyVector[0].push_back(s);

如果您使用的是for循环,那么您可能已经知道最大大小是多少,因此您可以像这样使用
resize
方法:

adjacencyVector.resize(MAXSIZE)

如果您使用的是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.
}
#包括
#包括
#包括
int main()
{
std::vector v;//此语句创建整数列表的空向量。
std::list l;//此语句创建一个空整数列表。
对于(int i=0;i
然后我尝试将一个值推送到链表上

您试图访问一个不存在的对象。如果未将元素放入邻接向量[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.
}
#包括
#包括
#包括
int main()
{
std::vector v;//此语句创建整数列表的空向量。
std::list l;//此语句创建一个空整数列表。

对于(int i=0;i向量的大小是什么?它至少是i+1吗?向量的大小是什么?它至少是i+1吗?你能详细介绍一下我是怎么做的吗?我的向量没有固定的大小,我正在使用循环来推送正确的值。或者你可以
调整大小
保留
@erip:
保留()
将不会创建实际的
列表
对象,但
resize()
将创建对象。我尝试了这样做
vectorlinkedListVector(0,maxSize);
它给了我一个我不理解的错误。你能详细介绍一下我该怎么做吗?我的向量没有固定的大小,我正在使用循环来推送正确的值。或者你可以
调整大小
或者
保留大小
@erip:
保留()
不会创建实际的
列表
对象,但是
调整大小()
will。我尝试过这样做
vectorlinkedListVector(0,maxSize);
它给了我一个我不理解的错误。