向量的分配向量
Posted
技术标签:
【中文标题】向量的分配向量【英文标题】:Allocation vector of vector [duplicate] 【发布时间】:2020-04-16 17:53:55 【问题描述】:我有一个按以下方式构建的向量向量:
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。 我无法理解如何解决它! 谢谢你帮助我。
【问题讨论】:
reserve
只分配空间,它不会在向量中创建对象。因此,如果该索引处没有对象,您将无法访问 symbols[i0]
【参考方案1】:
明显的问题是capacity()
没有告诉你向量的大小,你需要size()
而reserve()
不会改变向量的大小,你需要resize()
。
最后你的测试太悲观了,在将caapcity
更改为size
之后,你可能只是有
if (i0 >= symbols.size())
和
if (i1 >= symbols[i0].size())
你不需要那里的-1
,如果索引>=到大小,则索引无效。
【讨论】:
你在那里读到了什么让你不使用它?如果您想调整矢量的大小,使用它是显而易见的。 我没有使用resize,因为我在cpp参考上读到:如果当前大小大于count,其中count是resize方法的参数,容器被缩小到它的第一个计数元素:[链接]en.cppreference.com/w/cpp/container/vector/resize @Martina_bxxu 但当前大小不能大于计数if (i0 >= symbols.size())
阻止这种情况。向量只会增长。以上是关于向量的分配向量的主要内容,如果未能解决你的问题,请参考以下文章