reserve 方法用来给 vector 预留空间,预留的空间只会改变 capacity 的大小,不会改变 size 大小。 resize 方法表示重新调整数组大小,capacity 和 size 都会改变。
使用 reserve 后,不能直接使用下标来增加元素,虽然内存是已经分配了直接使用不会报错,但是直接通过下标来复制会导致其他参数得不到更新 (如 size),会导致意想不到的错误。如以下代码:
1 2 3 4 5 6 7 8 |
int i; vector<int> v; v.reserve(10); cout << "cap: " << v.capacity() << ", size: " << v.size() << endl; for (i = 0; i < 10; i++) { v[i] = i; } cout << "cap: " << v.capacity() << ", size: " << v.size() << endl; |
输出:
1 2 |
cap: 10, size: 0 cap: 10, size: 0 |
通过下标给数组中的每个元素复制,实际上本身数组的长度并没有得到增长,一旦再执行 push_back 就会导致前面的数据被覆盖。正确的方式是使用 push_back 或者 insert 方法插入元素。
评论