问题
今天想要用vector实现二维数组的功能,尝试了把二维vector.谁知道刚上手就遇到了雷.
代码的形式大致如下:
vector<vector<int>>vv(3);
vv.clear();
for (int i = 0; i < 3; i++)
vv[i].push_back(0);
因为要重复使用该二维vector,所以进行了清空操作.然而却遇到了问题:vector subscript out of range
![](https://img-blog.csdn.net/20170430212721121?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3RlcGhlbl9fX1Fpbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
原因
后来在单步调试时发现了,clear()会让二维vector的size变成0,之前声明的3个一维数组的结构遭到破坏.(但可以看到它的capacity容量还是之前的值,这个后面会讲到).
执行到for的头部时,自动窗口如下:
![](https://img-blog.csdn.net/20170430212736444?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3RlcGhlbl9fX1Fpbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如何解决
对上述代码做下改变:
vector<vector<int>>vv(3);
vv.clear();
vv.resize(3);
for (int i = 0; i < 3; i++)
vv[i].push_back(0);
相当于把外层的vector的长度又恢复到了之前的值.
同样是执行到for的头部时,自动窗口如下:
![](https://img-blog.csdnimg.cn/20210909184040764.png)
size和capacity的辨析:
vector的size和capacity的辨析:
《C++ primer》中说size指容器当前拥有的元素个数,而capacity则指容器在必须分配新存储空间之前可以存储的元素个数(和内存大小相关)。可以大概拿乐高积木里的小人儿(size)和这些人住的院子(capacity)来做类比:
- 当放若干个小人儿时,我们同时也会搭容纳他们的院子.院子的容量>=小人儿的个数.
- 当vector进行clear操作时,就好像把小人儿从院子里都拿出去了,这时候size为0,而capacity院子的大小不会改变。
- resize相当于把小人的个数size给定下来了,如果此时院子的容量能容纳这些小人儿的话,capacity不会改变.但倘若容量不够了,则capacity会增加.但vector中capacity并非按照size的量来设计的.它一般会变为原来空间的2倍.
可能不是特别妥帖,欢迎大家讨论.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)