向量的分配向量



我有一个向量向量,按以下方式构建:

std::vector<std::vector<int>> symbols;

我想在结构中插入一些 int。为此,我想检查插入 int 的位置是否合法。我试图让矢量以动态的方式成长。 出于这个原因,我编写了以下代码:

void checkIndex(unsigned int i0, unsigned int i1) {
int mult_fac=2;
if(i0>=symbols.capacity()-1){
symbols.reserve((i0+1)*mult_fac);
}
if(i1>=symbols[i0].capacity()-1){
symbols[i0].reserve((i1 + 1)*mult_fac);
}

}

为了验证所有这些是否有效,我编写了一个 main:

int main() {
for(;;){
int i=rand()%1000;
int j=rand()%1000;
checkIndex(i,j);
}
return 0;}

但是,输出显示错误的内存访问:

"进程已完成,退出代码 -1073741819 (0xC0000005)">

我正在使用 Windows 10。 我不明白如何解决它! 谢谢你帮助我。

明显的问题是capacity()没有告诉你向量的大小,你需要size()reserve()不会改变向量的大小,而是需要resize()

最后你的测试太悲观了,在改变caapcity之后size你可以拥有

if (i0 >= symbols.size()) {

if (i1 >= symbols[i0].size()) {

您不需要其中的-1,如果索引>=大小,则索引无效。

最新更新