[Effective STL] Vector和String

这篇博客探讨了如何有效使用STL中的Vector和String。建议通过reserve预先分配空间以避免不必要的内存重新分配,利用&v[0]和string.c_str()将它们的数据传递给旧API,并使用swap技巧来减少多余的容量。同时提醒读者注意避免不适用于容器的操作。
摘要由CSDN通过智能技术生成

使用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> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值