使用reserve来避免不必要的重新分配
关于STL容器,最了不起的一点是,它们是自动增长以便容纳下你放入其中的数据,只要没有超出它们的最大限制就可以。
对于vector和string,增长过程是这样的:每当需要更多空间时,就调用与realloc类似的操作。
1、分配一块大小为当前容量的某个倍数的新内存。在大多数实现中,vector和string的容量每次以2的倍数增长,即,每当容器需要扩张时,它们的容量即加倍。
2、把容器中所有元素从就内存拷贝到新内存。
3、析构掉旧内存中的对象。
4、释放旧内存。
为了避免上述重新分配过程,通过reserve实现
1、若能确切知道或大致预计容器中的最终会有多少元素,则此时可使用reserve,可以预留适当大小空间。
2、先预留足够大的空间,然后把所有的数据都加入以后,再删除多余的容量。
把vector和string数据传给旧的API的方法
1、对于
vector<int> v;
可以用&v[0]来表示int指针,但要注意当vector为空的时候,&v[0]表示int指针对指向东西不存在。
2、对于string,可以用string.c_str()获得字符串指针,但要注意这个字符串指针所指向的是string数据不可拷贝的对象。
如果想把C API中的数据写入STL容器,可以先将数据写入vector,然后把数据拷贝到期望最终写入STL容器中:
size_t fillarray(double *pArray,size_t arraysize);
vector<double>