假如vector中存放100个string(不是指针类型string*,而是string),那么如果vector中的一个元素重新分配空间,会不会造成整个vector重新分配空间呢?假如代码如下:
vector *v1 = new vector(100);
v1[20].append("abc");
假设最后一句使v1[20]字符串超出原分配空间,根据string类型的算法,这个字符串会重新分配空间并复制数据,因为它属于v1的,而v1中的元素必须是连续的,所以是不是它也将会造成整个v1重新分配空间并复制数据呢?
关于c++的vector空间分配的问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
9条回答 默认 最新
- threenewbee 2015-04-20 03:04关注
// ConsoleApplication1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <vector> #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { vector<string> vec; vec.push_back("aaa"); vec.push_back("bbb"); vector<string>::iterator it; for (it = vec.begin(); it != vec.end(); it++) cout << (void *)&(*it) << endl; for (int i = 0; i < 100000; i++) vec[0].append("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); for (it = vec.begin(); it != vec.end(); it++) cout << (void *)&(*it) << endl; return 0; }
0063CFF8
0063D014
0063CFF8
0063D014
Press any key to continue . . .第一个元素已经被追加了1千万个a,起码用了10M的内存,地址没有任何变化,可见根本和这个不相干。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报