vector超过容量后会导致删除原来容器的对象,进行析构操作,扩大内存后会对原来数据对象复制构造,降低性能。
if (!v.empty()) { doSomething(&v[0], v.size()) }
vector<Contestant>(constestants).swap(contestants);
vector<Contestant>(constestants)创建临时向量
string(s).swap(s);
清空容器:
vector<Contestant>().swap(v)
string().swap(s);
vector<bool>是假的容器,它并不真的存储bool,相反为了节省空间,它存储的时bool的紧凑表示。
vector<bool>::operator[]返回一个对象,这个对象表现的像一个指向单个位的引用,即所谓的代理对象。
解决方法
- 使用deque<bool>,deque<bool>内存不是连续的。
- 使用bitset,不支持插入和删除元素。不支持迭代器。
Effective STL -- vector和string
原文地址:http://blog.csdn.net/zjufirefly/article/details/44341377