C++ 如何分配二维向量?
我在一个问题中使用了C++ 如何分配二维向量?,c++,algorithm,c++11,data-structures,stdvector,C++,Algorithm,C++11,Data Structures,Stdvector,我在一个问题中使用了dfs,但到目前为止,我还没有主要调用dfs,我的程序正在崩溃。最近我在c中编程,现在我切换到cpp。所以我是新来的cpp 我知道我在矢量中犯了什么错误,请告诉我可以改进什么。 我知道向量可以自动增加大小 #include<iostream> #include<vector> using namespace std; const int MAX = 100000; bool visited[MAX] = { 0 }; int intime[MAX];
dfs
,但到目前为止,我还没有主要调用dfs
,我的程序正在崩溃。最近我在c
中编程,现在我切换到cpp
。所以我是新来的cpp
我知道我在矢量中犯了什么错误,请告诉我可以改进什么。
我知道向量可以自动增加大小
#include<iostream>
#include<vector>
using namespace std;
const int MAX = 100000;
bool visited[MAX] = { 0 };
int intime[MAX];
int outtime[MAX];
int timer = 0;
void dfs(vector<vector<int>> graph, int v)
{
visited[v] = true;
timer++;
intime[v] = timer;
vector<int>::iterator it = graph[v].begin();
while (it != graph[v].end()) {
if (visited[*it] == false)
{
dfs(graph, *it);
}
it++;
}
++timer;
outtime[v] = timer;
}
int main()
{
vector<vector<int>> graph;
graph[1].push_back(2);
graph[1].push_back(3);
graph[3].push_back(6);
graph[2].push_back(4);
graph[2].push_back(5);
graph[5].push_back(7);
graph[5].push_back(8);
graph[5].push_back(9);
system("pause");
}
#包括
#包括
使用名称空间std;
常数int MAX=100000;
布尔访问了[MAX]={0};
intintime[MAX];
int超时[最大值];
int定时器=0;
void dfs(向量图,int v)
{
访问[v]=正确;
定时器++;
intime[v]=计时器;
向量::迭代器it=graph[v].begin();
while(it!=graph[v].end()){
if(已访问[*it]==false)
{
dfs(图,*it);
}
it++;
}
++定时器;
outtime[v]=计时器;
}
int main()
{
矢量图;
图[1]。推回(2);
图[1]。推回(3);
图[3]。推回(6);
图[2]。推回(4);
图[2]。推回(5);
图[5]。推回(7);
图[5]。推回(8);
图[5]。推回(9);
系统(“暂停”);
}
您的程序因访问未分配的内存而崩溃。正确的方法是
std::vector<std::vector<int>> graph(5); // allocates 5 rows of vector of vectors
^^^^
或者,可以使用直接初始化向量的向量
std::向量图
{
{2,3},//向量的第一行
{4,5},//向量的第二行
{6} ,//向量的第三行
{7,8,9}//向量的第四行
};
或每行向量到向量的向量
使用Row=std::vector;
向量图;
图.向后安放(第{2,3}行);
图{4,5}行的后置位置;
图{6}行的后置位置;
图.向后安放(第7、8、9行);
您的程序因访问未分配的内存而崩溃。正确的方法是
std::vector<std::vector<int>> graph(5); // allocates 5 rows of vector of vectors
^^^^
或者,可以使用直接初始化向量的向量
std::向量图
{
{2,3},//向量的第一行
{4,5},//向量的第二行
{6} ,//向量的第三行
{7,8,9}//向量的第四行
};
或每行向量到向量的向量
使用Row=std::vector;
向量图;
图.向后安放(第{2,3}行);
图{4,5}行的后置位置;
图{6}行的后置位置;
图.向后安放(第7、8、9行);
按照您声明的方式,向量的大小为零
您可以做的是声明具有大小的向量
int v = 10;
std::vector<std::vector<int>>graph(v);
graph[1].push_back(2);
intv=10;
标准:矢量图(v);
图[1]。推回(2);
这将起作用。按照您声明的方式,向量的大小为零 您可以做的是声明具有大小的向量
int v = 10;
std::vector<std::vector<int>>graph(v);
graph[1].push_back(2);
intv=10;
标准:矢量图(v);
图[1]。推回(2);
这将起作用。
图形[1]
在矢量图形之后代码>是未定义的行为,因为不存在元素访问。我正在声明一个2d向量,它是vector@humblefool您正在声明一个空的2d向量,然后访问不存在的元素。@humblefool“在这里行大小无关紧要,它们可以根据需要展开”仅当使用推回
,放置
,或调整大小
。考虑重新阅读.<代码>图[1 ] < /代码>后的代码>矢量图;<代码>是未定义的行为,因为不存在元素访问。我正在声明一个2d向量,它是vector@humblefool您正在声明一个空的2d向量,然后访问不存在的元素。@humblefool“在这里行大小无关紧要,它们可以根据需要展开”仅当使用推回
,放置
,或调整大小。考虑重新阅读文档。
int v = 10;
std::vector<std::vector<int>>graph(v);
graph[1].push_back(2);