我有这个代码
#include <iostream>
#include <cstdio>
#include <vector>
#define NMax 100
using namespace std;
vector <int> v(100);
int n;
FILE* in = freopen("input.in", "r", stdin);
FILE* out = freopen("output.out", "w", stdout);
void afiseaza(){
int i;
for(i = 1; i <= n; i++){
fprintf(out, "%d", v.at(i));
}
fprintf(out, "\n");
}
void bkt(int i){
if(i == n + 1) afiseaza();
else{
int i, j;
for(j = v.at(i-1); j <= n; j++){
v.at(i) = j;
}
bkt(i+1);
}
}
int main()
{
int i, j;
fscanf(in, "%d", &n);
bkt(1);
fclose(in);
fclose(out);
return 0;
}
它抛出std :: out_of_range错误,我无法理解为什么,向量的大小在边界内。试图找到更多关于错误的信息,但无法在我的代码中找到问题 Ty适合你的时间
答案 0 :(得分:1)
将此作为单独的答案添加,因为它与我的第一个建议完全不同。在bkt
的循环中,声明一个新的locallly作用域i
,它隐藏了函数参数并具有未定义的值。使用此i
可能是您获得异常的原因。
答案 1 :(得分:0)
矢量索引从0开始,有效值为0到size-1。如果我正确地跟踪您的代码,如果您为bkt
输入0或更少,则在第一次调用n
时访问index - 1,然后在afiseaza
中输入索引大小。
我建议您使用调试器逐步执行代码并随时观察值。
答案 2 :(得分:0)
您的代码首次尝试访问v
时,会调用v.at(-1)
。这显然是出界的。