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);
它给了我一个我不理解的错误。