新用户在这里。
我一直在编写此代码,该代码创建带有节点的网络,并使用随机数在它们之间创建边。我将整个图作为一个 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/

10-11 22:54
查看更多