C++: 泛型算法

泛型算法

  泛型算法大多数独立于任何特定的容器,这些算法是独立的(或者称“泛型的”),他们可以用于不同类型的容器和不同类型的元素。泛型算法本身不会执行容器的操作,他们只会运行在迭代器之上,执行迭代器的操作。

      泛型算法基本包含在<algorithm>和<numeric>头文件里。

算法的形参模式:

alg (beg, end, other args);

alg (beg, end, dest, other args);

alg (beg, end, beg2, other args);

alg (beg, end, beg2, end2, other args);

注意:迭代器的表示范围一般都是左闭右开的,如 [begin, end )。

其中,alg 是算法的名字, beg 和 end 是两个迭代器,表示算法所操作的输入范围。dest、beg2、end2 都是迭代器参数,如果用到这些参数,他们分别表示的是指定目的位置和第二个范围。除了这些迭代器参数,一些算法还会接受额外的、非迭代器的特定参数。

常用的泛型算法有:   

fill(vec.begin(), vec.end(), value);  // 将value值赋给vec的两个迭代器指定范围的每一个元素 
     
accumulate(vec.begin(), vec.end(), initValue);     // 对vec中的元素求和,求和的初始值是initValue 
     
find(vec.begin(), vec.end(), key);   // 在vec中查找元素key,若找到,则返回结果指向它;否则返回vec.end()      

count(vec.begin(), vec.end(), key);  // 在vec中查找元素key,统计key出现的次数,并返回。

find_if(vec.begin(), vec.end(),一元谓词或者lambda表达式) // 他返回第一个使为此返回非零值的元素的迭代器,否则返回尾迭代器

for_each(vec.begin(), vec.end(),可调用对象) // 此算法接受一个可调用对象,对输入序列的每一个元素调用此对象

猜你喜欢

转载自blog.csdn.net/growth_path_/article/details/82757496