您的位置:首页 > 其它

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中容器的运行的基本方式,将元素加入到容器,必然保持一个拷贝,容器中的元素不再是原来的那个元素,所以如果将指针加入容器,必须在容器离开作用域以前删除指针所指的对象。

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
}
原则:注意对于 vector,任何插入删除操作都会引起迭代器失效。所以要小心。

原创文章,转载请注明: 转载自C/C++程序员之家

本文链接地址: STL之vector的使用四(vector的查找、空、及其它技巧)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: