临时对象的产生和运用以及仿函数的用法

        临时对象即无名对象。如果临时对象的出现不在程序员的预期之下,则会造成效率上的负担。而有时候,刻意制造的临时对象又使得程序看起来简洁明快。STL最常将此算法应用于仿函数和算法的搭配上。如(摘抄于STL源码剖析):
# include<vector>
# include<algorithm>
# include<iostream>
using namespace std;
template<typename T>
class print
{
public:
	void operator()(const T&elm)
	{
		cout << elm << " ";
	}
};
int main()
{
	int ia[6] = { 0, 1, 2, 3, 4, 5 };
	vector<int> iv(ia, ia + 6);
	for_each(iv.begin(), iv.end(), print<int>());
	//这里的print<int>()是一个匿名对象并不是一个函数调用显得简洁。
}


algorithm这个库中存在大量基于迭代器的大量非成员模板函数。其功能梳理如下:

accumulate 累加序列的所有元素

adjacent_difference 计算序列中的相邻元素是否不同

adjacent_find 查找相邻的两个相同(或者有其他关联)元素

any_of 如果对于任意元素的谓词测试都为true,则返回true (C++11)

all_of 如果对于所有元素的谓词测试都为true,则返回true (C++11)

binary_search 确定容器中是否存在某个元素

copy 拷贝元素到新的位置

copy_backward 逆序拷贝元素

count 返回匹配给定值的元素数目

count_if 返回符合条件的元素数目 (C++11)

equal 确定两个集合中的所有元素皆相同

equal_range 搜索序列中的由相同元素组成的子序列

fill 为一个序列赋值

fill_n 为序列中给定数目的元素赋值

find 在序列中查找一个匹配值的元素

find_end 在序列中查找最后出现的序列

find_first_of 在序列中查找给定集合的任一元素

find_if 在序列中查找第一个符合条件的元素

for_each 为序列中的每个元素应用指定的函数

generate 将函数的运行结果储存在一个序列中

generate_n 将N次驱动函数的结果储存在一个序列中

includes 检查一个集合是否是另外一个集合的子集

inner_product 计算两个序列的内积

inplace_merge 内置式归并

is_heap 检查给定的序列是否是堆 (C++11)

iter_swap 交换两个迭代器指向的元素

lexicographical_compare 按字典顺序检查一个序列是否小于另外一个序列

lower_bound 查找第一个插入元素但不影响序列有序性的位置

make_heap 创建一个堆并以序列的形式输出

max 返回两个元素间的较大者 (C++11)

max_element 返回序列中的最大者

merge 对两个有序序列进行归并处理

min 返回两个元素间的较小者 (C++11)

min_element 返回序列中的最小者

mismatch 查找两个序列的第一个不相同的位置

next_permutation 依照字典顺序生成序列的下一个稍大的排列

none_of 如果对于所有元素的谓词测试都为false,则返回true (C++11)

nth_element 插入一个元素至它的排序位置并确保它左边的元素都不大于它右边的元素

partial_sort 将序列中的前N个元素排序

partial_sort_copy 拷贝并部分排序

partial_sum 计算序列中部分元素之和

partition 将元素序列分成两组

pop_heap 从一个堆中移除最大的元素

prev_permutation 依照字典顺序生成序列的下一个稍小的排列

push_heap 添加一个元素至堆

random_shuffle 随机生成元素的一个排列

remove 移除给定值的所有元素

remove_copy 拷贝一个序列中元素的同时忽略那些匹配给定值的元素

remove_copy_if 拷贝一个序列中元素的同时忽略那些符合条件的元素

remove_if 移除序列中所有符合条件的元素

replace 将序列中的一些元素以另外一个值替换

replace_copy 拷贝一个序列并将其中一些替换为新值

replace_copy_if 拷贝一个序列的元素并替换掉那些符合条件的元素

replace_if 替换掉符合条件的元素

reverse 将给定序列反转顺序

reverse_copy 以逆序拷贝元素的方式创建序列的副本

rotate 调换一些元素到序列的左边

rotate_copy 拷贝并调换元素

search 搜索子序列

search_n 搜索N个连续的元素拷贝

set_difference 计算两个集合的差集

set_intersection 计算两个集合的并集

set_symmetric_difference 计算两个集合的对称差

set_union 计算两个集合的交集

sort 将序列按升序排序

sort_heap 将堆转变成有序序列

stable_partition 将元素划分成两组且维持原来的元素次序

stable_sort 将序列排序并且维持相等元素的原始次序

swap 交换两个对象的值

swap_ranges 交换两个序列的元素

transform 通过给定函数转换序列元素

unique 移除连续的重复元素

unique_copy 拷贝序列并忽略相同元素以创建一个无重复元素的集合

upper_bound 搜索最后一个插入元素并能维持序列有序性的位置(第一个稍大于给定值的位置)

(本表未全部列出,只有常用部分)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值