STL之vector的使用四(vector的查找、空、及其它技巧)
2014-03-25 00:04
288 查看
判断vector是否为空
在判断容器是否为空的时候,使用empty()来代替size()是否为了0的检查方式,因为empty更加高效时间复杂度是常数时间的,size()时间复杂度不是常数时间的。
原则:使用empty判断标准容器是否为空
vector中的查找
原则:尽量使用标准容器自带的算法代替公共算法。
但是vector中并没有多少自己的算法,倒是list中有remove ,remove_if,sort,reverse等算法。
find
find_if
使用交换技巧来修正过剩的容量
vector<int> v1;
//…初始化v1
//…删除v1中所有的元素
但是这个时候v1的内存容量并不是0,还是很大的一块内存没有释放,如果想清空
用v1.reserve(0);到不到目标,因为reserve只能扩大内存容量,并不能减小。
vector<int> v2;
v2.swap(v1);
这个时候就是真的将之内存容量降到最低了。
题外话:使用算法及其他技巧
原则:不要使用auto_ptr作为模板参数来建立容器,这会产生意想不到的陷阱,因为auto_ptr的拷贝有特殊的语义
原则:避免使用vector<bool>, 因为它不能当作标准容器来用
copy
find_if
for_each
原则:尽量使用区间成员函数代替它们的单元素参数兄弟成员函数
区间构造
区间删除
区间赋值
区间插入
原则:使得容器中元素的拷贝操作轻量而正确,拷贝是STL中容器的运行的基本方式,将元素加入到容器,必然保持一个拷贝,容器中的元素不再是原来的那个元素,所以如果将指针加入容器,必须在容器离开作用域以前删除指针所指的对象。
原则:注意对于 vector,任何插入删除操作都会引起迭代器失效。所以要小心。
原创文章,转载请注明: 转载自C/C++程序员之家
本文链接地址: STL之vector的使用四(vector的查找、空、及其它技巧)
在判断容器是否为空的时候,使用empty()来代替size()是否为了0的检查方式,因为empty更加高效时间复杂度是常数时间的,size()时间复杂度不是常数时间的。
原则:使用empty判断标准容器是否为空
vector中的查找
原则:尽量使用标准容器自带的算法代替公共算法。
但是vector中并没有多少自己的算法,倒是list中有remove ,remove_if,sort,reverse等算法。
find
find_if
使用交换技巧来修正过剩的容量
vector<int> v1;
//…初始化v1
//…删除v1中所有的元素
但是这个时候v1的内存容量并不是0,还是很大的一块内存没有释放,如果想清空
用v1.reserve(0);到不到目标,因为reserve只能扩大内存容量,并不能减小。
vector<int> v2;
v2.swap(v1);
这个时候就是真的将之内存容量降到最低了。
题外话:使用算法及其他技巧
原则:不要使用auto_ptr作为模板参数来建立容器,这会产生意想不到的陷阱,因为auto_ptr的拷贝有特殊的语义
原则:避免使用vector<bool>, 因为它不能当作标准容器来用
copy
find_if
for_each
原则:尽量使用区间成员函数代替它们的单元素参数兄弟成员函数
区间构造
区间删除
区间赋值
区间插入
原则:使得容器中元素的拷贝操作轻量而正确,拷贝是STL中容器的运行的基本方式,将元素加入到容器,必然保持一个拷贝,容器中的元素不再是原来的那个元素,所以如果将指针加入容器,必须在容器离开作用域以前删除指针所指的对象。
1 | void fun() |
2 | { |
3 | vector<object*> v1; |
4 | …… //插入操作 |
5 | for ( vector<object*> :: iterator i = v1.begin(); i != v1.end(); ++i ) |
6 | { |
7 | delete *i; |
8 | } |
9 | } |
原创文章,转载请注明: 转载自C/C++程序员之家
本文链接地址: STL之vector的使用四(vector的查找、空、及其它技巧)
相关文章推荐
- stl 中list 或者vector正确使用find查找类对象
- STL中Vector容器Find的使用(int查找)
- C++ vector 自定义类,重载==操作符,使用STL的find查找
- stl 查找vector中的类成员,使用bind器
- STL的vector使用
- STL-vector的使用 详细说明
- STL:使用string、vector、complex和limits
- PyCharm使用技巧:Find Usages(查找引用)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL中vector使用
- PyCharm使用技巧:Find Action(查找并跳转到设置界面)
- STL之vector的使用
- STL(1)——查找函数find的使用
- STL 使用技巧
- leetcode-27. Remove Element--STL Vector remove()和erase()的使用
- STL之vector的使用一(初始化vector)
- 使用swap技巧除去多余的容量 STL 第17条
- STL中vector查找算法find()和find_if()深入比较
- 一种动态call地址查找及使用方法 -- QQ游戏斗地主角色版-喊话call定位技巧
- MyEclipse使用总结——MyEclipse文件查找技巧