STL常用函数小结

来源:互联网 发布:人工智能 经济学 论文 编辑:程序博客网 时间:2024/05/16 06:19

下面是看Effective STL过程总结的一些比较常用的STL算法。

关于Effective STL的总结请看这里点击打开链接。


注意:

1. 对某些容器来说,执行某些操作后可能使当前的迭代器、指针和引用失效,这一点要特别注意,Effective STL P36 第9 条谈到这一点。

2. 使用reserve成员函数改变当前容量以减少内存重新分配次数。

3. (第17条)使用swap技巧除去多余容量。不过C++11已经添加了shrink_to_fit方法支持该操作。

4. (第18条)vector<bool>并不是一个容器,不能对单个元素进行取地址的操作。最好使用deque<bool>或bitset替代vector<bool>。

5. (第21条)保证关联容器(set, multiset, map, multimap)的比较函数在等值情况下返回false


std::vector::assign

std::vector::insert


std::deque

std::set:set模板参数中的Compare必须是个类型,不能是函数指针,也就是必须为一个重载了operator()的class或struct。


std::less_equal:比较函数模板


std::copy:很强大的函数


back_inserter:插入到容器后面,与copy一起用

std::inserter:插入迭代器


std::vector::assign:vector 赋值操作,可以使用区间参数


std::istream_iterator:输入流迭代器

std::ostream_iterator:输出流迭代器


std::iterator_traits:得到容器参数类型,迭代器类型等信息


std::remove : 不改变容器大小

std::vector::erase

c.erase( remove(c.begin(), c.end(), badValue), c.end );     // c标准序列容器(vector, string, deque)时使用这种方法删除指定元素


std::list::remove :改变容器大小

c.remove(badValue); // list则使用成员函数更好


std::set::erase :关联容器不能用 remove 算法

c.erase(badValue); // c是标准关联容器时,使用erase成员函数最好


std::remove_if


std::list::remove_if


std::remove_copy_if


std::partial_sort


std::partition


std::transform:强大的序列转换函数:


std::not1:将其参数函数子返回值取反,参数不能为函数指针,必须为一个函数对象,函数指针须用ptr_fun转换

std::not2:同上,只是参数函数对象含两个参数


std::ptr_fun:参看第41条

std::mem_fun

std::mem_fun_ref


std::bind:C++11标准,绑定函数参数,参数可变

std::bind1st:C++99 标准,将元函数配接为一元函数,配接第一个参数

std::bind2nd:同,不过配接是第二个参数


std::accumulate:区间统计算法,可接自定义的统计函数。位于头文件 numeric中

std::multiplies:乘法函数模板,位于<functional>头文件中。


std::for_each


std::find_if


std::logical_and


std::lower_bound:区间内第一个 >= 指定元素的位置

std::upper_bound:区间内第一个 > 指定元素的位置

std::equal_range:返回pair类型,由两个迭代器组成,一个是lower_bound返回值一个是upper_bound返回值。

std::binary_search:返回值为bool,只判断是否存在指定元素


std::count:返回区间内指定元素个数


std::distance:返回两个迭代器之间的元素个数

原创粉丝点击