当我尝试在c ++中填充2d向量时,我不断出现超出范围的错误。我哪里错了?下面发布的是我的问题的缩短版本,我认为会产生同样的问题。
#include <vector>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
typedef std::vector<double> NA;
typedef std::vector<NA> NB;
NA NI;
NB NO;
long i=0,j=0;
int N = 10;
double R;
int main(){
for(i=0;i!=N;i++){
NO.push_back(NI);
for(j=i+1;j<N;j++){
R = rand();
NO.at(i).push_back(j);
NO.at(i).at(j) = R;
}
}
}
答案 0 :(得分:2)
你的typedef是错误的。你的意思是:
typedef std::vector<double> NA;
typedef std::vector<NA> NB;
// ^^
您的循环索引错误。你的意思是j++
。
内部索引必须偏移:at(j - i - 1)
。
外部容器更新NO.push_back(NI);
需要进入外部循环。