一些C++ STL泛型算法整理
来源:互联网 发布:汉唐自远 知乎 编辑:程序博客网 时间:2024/06/08 01:29
泛型算法本身不会执行容器的的操作,他们只会运行于迭代器上,执行迭代器的操作。所以算法永远不会改变底层容器的大小,但可能改变容器中元素的值,也可能在容器中移动元素,但永远不会直接添加和删除元素。但标准库定义了一类特殊的迭代器,称为插入迭代器,这种迭代器赋值是,他们会在底层容器上执行插入操作。因此算法可以利用插入迭代器完成向容器中添加元素的操作,但算法本身永远不会做这样的操作。
大多数算法都定义在头文件algorithm中,numeric中也定义了一组数值泛型算法
1. 只读算法
只读取元素值,不改变元素,对于这类算法,通常最好使用cbegin()和cend()
find: auto result = find(vec.cbegin(), vec.cend(), val); //在容器中查找指定的元素值,结果返回指向查找到的元素的迭代器,如果未找到,返回vec.end() (起始迭代器,终止迭代器,查找的元素值)
count: int num = count(vec.cbegin(), vec.cend(), val); //返回给定值在序列中出现的次数
accumulate:int sum = accumulate(vec.cbegin(), vec.cend(), 0); //对元素进行求和 (起始迭代器,终止迭代器,和的初始值)
equal: bool result = equal(roster1.cbegin(), roster1.cend(), roster2.cbegin()); //用于确定两个序列是否保存相同的值,roster2中的元素数目应该至少与roster1一样多
find_if: find_if(vec.cbegin(), vec.cend(0, 一元谓词); //返回第一个使谓词返回非0值的元素,如果不存在则返回尾迭代器
2. 写容器元素的算法
fill: fill(vec.begin(), vec.end(), 0); //将每个元素重置为0
fille_n: fille_n(vec.begin(), vec.size(), 0) //将所有元素重置为0,这里不检查容器的大小是否超过限定
一种有意思的用法:插入迭代器,fill_n(back_inserter(vec), 10, 0); //相当于在容器尾部插入10个值为0 的元素
copy: auto ret = copy(begin(a1), end(a1), begin(a2)); //将数组a1中的内容拷贝到a2中,ret指向a2的尾元素之后的值
replace: replace(ilst.begin(), ilst.end(), 0, 42); //将容器中的值为0的元素值替换为42
replace_copy: replace_copy(ilst.begin(), ilst.end(), back_inserter(ivec), 0, 42); //不更改原序列,将原序列拷贝到ivec中,并将ivec中的值为0的元素替换为42
3. 重排容器元素的算法
sort: sort(vec.begin(), vec.end()); //重排输入序列中的元素,使之有序,是利用元素的<运算符来实现排序
unique: auto end_unique = unique(vec.begin(), vec.end()); //重排输入范围,使得不重复的元素出现在vec的开始部分,并返回不重复区域之后一个位置的迭代器
stable_sort: 保持原来顺序进行排序
for_each: for_each(vec.begin(), vec.end(), 可调用表达式); //对输入序列中每个元素调用此表达式对象
transform: transform(vec1.begin, vec1.end(), vec2.begin(), 可调用表达式); //前两个迭代器表示输入序列,第三个迭代器表示目的位置,算法对输入序列中每个元素调用可调用对象,并将结果写到目的位置。目的位置的迭代器与输入位置的迭代器可以相同
0 0
- 一些C++ STL泛型算法整理
- 转:c++STL算法整理
- STL的一些泛型算法
- 常用STL算法整理
- [C++]STL算法高效使用的一些建议
- C++(22):STL初步之泛型算法
- STL泛型算法
- stl泛型算法
- STL泛型算法
- 本人整理的一些排序算法(c语言实现)
- 一些算法的整理
- C++STL算法
- C++STL-算法transform
- C STL 之算法
- C++STL 常用算法
- C++STL算法简述
- C++--STL--transform算法
- 算法笔记--c++STL
- Android性能优化
- 算法导论----<插入排序>及实例
- libsvm使用心得
- 并查集
- 学习android的建议(邓凡平)
- 一些C++ STL泛型算法整理
- Iwfu-安卓网络应用---WebView
- php返回两个时间点的差距,以非常人性化的显示出来
- Phaser入门教程
- 位图索引的应用
- 单元测试2(android)
- AOP
- GDB内存断点(Memory break)的使用举例
- Linux进程和内核级进程的一些知识