条款13:尽量使用vector和string来代替动态分配的数组
原因是简单省事。
条款14:使用reserve来避免不必要的重新分配
避免不必要的内存重新分配。
条款15:小心string实现的多样性
字符串值可能是或可能不是引用计数的。
string对象的大小可能从1到至少7倍char*指针的大小。
新字符串值的建立可能需要0、1或2次动态分配。
string对象可能是或可能不共享字符串的大小和容量信息。
string可能是或可能不支持每对象配置器。
不同实现对于最小化字符缓冲区的配置器有不同策略。
条款16: 如何将vector和string的数据传给遗留的API
可以这样if (!v.empty()) { doSomething(&v[0], v.size());}
v.begin()不能代替&v[0]
可以这样doSomething(s.c_str());
条款17:使用“交换技巧”来修整过剩容量
vector<Contestant> v;
string s;
... // 使用v和s
vector<Contestant>().swap(v); // 清除v而且最小化它的容量
string().swap(s); // 清除s而且最小化它的容量
看看源代码或许明白,现在先记着。
条款18:避免使用vector<bool>
vector<bool>不满足STL容器的必要条件,你最好不要使用它;而deque<bool>和bitset是基本能满足你对vector<bool>提供的性能的需要的替代数据结构。