假如vector中存放100个string(不是指针类型string*,而是string),那么如果vector中的一个元素重新分配空间,会不会造成整个vector重新分配空间呢?假如代码如下:
vector *v1 = new vector(100);
v1[20].append("abc");
假设最后一句使v1[20]字符串超出原分配空间,根据string类型的算法,这个字符串会重新分配空间并复制数据,因为它属于v1的,而v1中的元素必须是连续的,所以是不是它也将会造成整个v1重新分配空间并复制数据呢?
// 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的内存,地址没有任何变化,可见根本和这个不相干。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。