gpt4 book ai didi

c++ - vector 超出范围/范围检查

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:55 24 4
gpt4 key购买 nike

这里是新用户。我一直在编写这段代码,它创建一个带有节点的网络,并使用随机数在它们之间创建边。我将整个图作为一个 vector 来跟踪,每个条目都是一个 vector ,代表一个节点,其元素是它的邻居。然后它使用深度优先搜索来查找组件的数量,这些组件是图形的独立部分(我的计数变量)。然后我将节点和它所连接的邻居的数量输出到一个 txt 文件中。代码编译,但命令提示符给我一个错误:

在抛出“std::out_of_range”实例后调用终止 what(): vector::_M_range_check

此应用程序已请求运行时以异常方式终止它。请联系支持...

那么...这是什么意思,我该如何解决?

此外,我需要跟踪每个组件中有多少个节点,有什么想法吗?

提前致谢,这是我的代码:

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <vector>
using namespace std;

void gengraph(int v, float p, vector <vector <int> >& G);
void DFS(vector <vector <int> > G, int v, vector<int>& M);

int main()
{
int a = 1000;
float b = 0.004;
vector <vector <int> > G;
gengraph(a,b,G);
vector <int> M (1000);
int count = 0;
int i;
for (i = 0; i < a; i++)
{
if (M[i]==0)
{
DFS(G, i, M);
count += 1;
}
}
ofstream myfile;
myfile.open ("data.txt");
for (int l=0; l<1000; l++)
{
myfile << "v len(G[v])\n";
}
myfile.close();
}
void gengraph(int v, float p, vector <vector <int> >& G)
{
for (int i = 0; i<1000; i++)
{
for (int j = 0; j<1000; j++)
{
int y = rand();
bool Prob = (y <= p);
if (i == j)
continue;
else
{
if(Prob == true)
{
G.at(i).push_back (j);
G.at(j).push_back (i);
}
}
}
}
}
void DFS(vector <vector <int> >& G, int v, vector<int>& M)
{
M[v]=1;
for(unsigned int j = 0; j < G[v].size(); j++)
{
if (M[j]==0)
{
DFS(G, j, M);
}
}
}

最佳答案

您创建了 vector > 但它的初始大小为 0。

现在,当您使用 M.at() 访问它时,它会检查该索引是否超出范围,如果超出范围则抛出异常。

将 vector 定义为:

vector<vector<int> > M(1000);

应该可以解决您的问题。

您还应该使用 gdb 或其他调试器。它会让你的生活更轻松

关于c++ - vector 超出范围/范围检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15079487/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com