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[]返回的是一个代理对象,这只不过是为了描述“通过代理来存取元素的容器”的实验,但貌似搞砸了。