2.vector和string

来源:互联网 发布:juniper client mac 编辑:程序博客网 时间:2024/06/06 01:15

Item13:

vector和string优先于动态分配的数组

如果在多线程环境下使用了引用计数的string,应当注意因支持线程安全而导致的性能问题。

  • 是否能通过改变某个预处理变量的值禁止引用计数
  • 开发一个不使用引用计数的string实现
  • 使用vector< T >替换

Item14:

使用reserve来避免不必要的重新分配

Item15:

注意string实现的多样性

通常包含size,capacity,value,Allocator,引用计数等。大小范围为char*指针的1~7倍

Item16:

了解如何把vector和string数据传给旧的API
  • vector可以通过&v[0]将数组头指针传递过去,但此时不能试图在vector中为使用的空间中创建元素,因为此时vector无法调整size。
  • string可以通过s.c_str()

Item17:

使用“swap技巧”除去多余的容量

1.vector< T >(vec).swap(vec);  
  创建临时vector并与vec交换,由于STL实现不一定将临时数组的 capacity设为vec.size(),可能会预留空间,导致偏大。所以该技巧只是使容器的容量在该实现下变为最小。
2.vector< T >().swap(vec);
  清除vec并把它的容量变为最小。
3.C++11中可以调用shrink_to_fit()

Item18:

避免使用vector< bool >

  你可以创建一个指向bool的指针,但指向单个位的指针则是不允许的。
  而vetor< bool >内部是以二进制位实现的,所以无法对成员进行取址,不符合STL标准。vector< bool >::operator[]返回的是一个代理对象,这只不过是为了描述“通过代理来存取元素的容器”的实验,但貌似搞砸了。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为荣耀锁屏密码忘了怎么办 华为手机屏锁密码忘了怎么办 华为荣耀9青春版相机很模糊怎么办 华为荣耀7手机照相忽然模糊怎么办 苹果5s进水开不了机怎么办 红米4a玩王者荣耀卡怎么办 老是显示媒体存储以停止运行怎么办 支付宝邮二维码地址留错了怎么办 华为畅享5s太卡怎么办 金立手机导航gps信号弱怎么办 贴了膜后边缘有气泡怎么办 魅族mx5刷机失败然后黑屏怎么办 魅族手机无线网玩王者卡怎么办 魅族手机玩王者荣耀卡怎么办 魅族手机导航gps信号弱怎么办 魅族手机4g信号差怎么办 魅族手机下面一排键失灵怎么办 魅族手机冲不进去电怎么办 苹果账号付款了又让付款怎么办 魅蓝3s开机定屏怎么办 魅族手机未找到固件怎么办不用电脑 魅族手机触屏局部失灵怎么办 更新了魅蓝的新系统掉帧怎么办 手机后盖摔了一下凹了一个洞怎么办 魅族手机充电需要重启怎么办 网上预约好了但就诊卡丢了怎么办 如果魅族手机锁屏密码忘记了怎么办 魅族手机应用加密忘记密码了怎么办 小米电视盒子3s死机黑屏怎么办 小米note充电充不进去电怎么办 乐视手机otg功能用不了怎么办 小米4c手机玩王者荣耀卡怎么办 捡的小米6被锁了怎么办 小米5s手机玩穿越火线卡怎么办 苹果平板更新完系统登录不上怎么办 谷歌商店一直卡在核对信息怎么办 贴吧邮箱忘了无法登陆怎么办 华为手机绑定了账号忘了怎么办 淘宝的手机多次注册无法登录怎么办 电脑看不到U盘里面的文件怎么办 c盘访问权限被锁了怎么办