C++ STL标准库常用泛型算法
2023-09-14 09:11:21 时间
转自:https://www.cnblogs.com/wkfvawl/p/9475939.html,https://www.cnblogs.com/linuxAndMcu/p/10264339.html
1.二分查找
#include <algorithm> //查找某个元素是否出现,返回布尔类型,找到value返回1,否则返回0,并不会返回下标 binary_search(arr[],arr[]+size ,value)//在数组中 binary_search(a.begin(),a.end(),value)//在向量中 //查找第一个大于等于某个值的迭代器,返回对应容器类型的iterator lower_bound(arr[],arr[]+size , value)//在数组中 //查找第一个大于某值的迭代器,返回对应容器类型的iterator,找不到就指向end() upper_bound(arr[],arr[]+size ,value)//在数组中
lower_bound()在查找value时如果在数组中出现了,那么就会返回第一个出现位置的下标,如果没有出现则它的功能和upper_bound一样。
例子:
#include <iostream> #include<algorithm> using namespace std; int main(){ vector<int> a={4,10,11,30,69,70,96,100}; int b=binary_search(a.begin(),a.end(),4);//查找成功,返回1 int c=binary_search(a.begin(),a.end(),69);//查找成功,返回1 //10在数组中,12不在数组中 int d=lower_bound(a.begin(),a.end(),10)-a.begin();//1 >= int f=upper_bound(a.begin(),a.end(),10)-a.begin();//2 > int e=lower_bound(a.begin(),a.end(),12)-a.begin();//3 >= int g=upper_bound(a.begin(),a.end(),12)-a.begin();//3 > //当存在重复元素时 vector<int> a={10,20,30,30,20,10,10,20}; sort(a.begin(), a.end());//二分查找需要在有序数组上进行 //10 10 10 20 20 20 30 30 int d=lower_bound(a.begin(),a.end(),10)-a.begin();//0 第一个>= int f=upper_bound(a.begin(),a.end(),10)-a.begin();//3 int e=lower_bound(a.begin(),a.end(),12)-a.begin();//3 int g=upper_bound(a.begin(),a.end(),12)-a.begin();//3 return 0; }
https://www.cnblogs.com/BlueBlueSea/p/13826493.html,我之前的这篇博客也记录了。
2.其他
//这些我用的不多
2.1排列组合
next_permutation(iv.begin(), iv.end());//下一个排列 prev_permutation(iv.begin(), iv.end());//上一个排列
https://blog.csdn.net/qian2213762498/article/details/79683905
next_permutation()会取得[first,last)所标示之序列的下一个排列组合,如果没有下一个排列组合,便返回false;否则返回true。
#include <iostream> #include<algorithm> using namespace std; int main(int argc, char** argv) { int a[4]={1,2,3,4}; sort(a,a+4); do{ //cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl; for(int i=0;i<4;i++) cout<<a[i]<<" "; cout<<endl; }while(next_permutation(a,a+4)); return 0; }
应该是会做一个轮转的。
vector<int> nums={4,3,2,1}; next_permutation(nums.begin(),nums.end()); for(auto& n:nums) cout<<n<<" "; #输出 1 2 3 4
2.2 数值算法
accumulate(vec.begin(), vec.end(), val);//求和,+val
2.3 关系算法
// max_element: 返回一个ForwardIterator,指出序列中最大的元素。 cout << "max_element: " << *max_element(iv1.begin(), iv1.end()) << endl; // min_element: 返回一个ForwardIterator,指出序列中最小的元素。 cout << "min_element: " << *min_element(iv1.begin(), iv1.end()) << endl;
等等,没有放进来,等用到的时候再学习。
相关文章
- 【C++】步步为营之综合应用
- C++ 标准IO库
- C++-标准C++中的string类的用法总结
- C++标准库 bitset
- C++标准pdf 分享
- C++11时代的标准库快餐教程(2) - STL概览
- C++ code:指针类型(pointer types)
- C/C++基础讲解(二十四)之数据结构篇之队列实例与K阶斐波那契序列
- 赎金信(C++)
- C++学习心得与c语言到c++衔接技巧
- 解答私信@被c++折磨头秃的花季美少女 //C++ 利用指针数组输入10个单词,编写函数对10个单词进行排序并输出,要求判断是否有相同的单词,如果有相同的单词在输出时该单词只输出一次。
- 解答私信@被c++折磨头秃的花季美少女 //C++ 编写一个进阶版的进制转换程序,运行功能如下:请选择要输入的数字的进制(2、8、10、16):请输入该数字:请选择要转换成的进制(2、8。。。
- 复习C++标准库多线程的基本使用
- C++一种简单的配置文件读取(格式有限制)
- C++ vector 每个元素 加减
- C++ 异常机制
- c++ vector 初始化_C++--vector()的用法
- c++ io标准库2
- 8.2 C++ AMP advanced concepts
- AI模型设计:C++实现深度学习神经网络模型及源码分享
- ubuntu下实现make编译g++(C++)和gcc(标准C)程序调用
- C++详细教程
- C++引用作为函数参数
- VS2022官宣C++ 20标准库完整版本释出
- C++、STL标准模板库和泛型编程——序列式容器 (侯捷)
- C++标准库 -- 关联容器 (Primer C++ 第五版 · 阅读笔记)
- C++标准库 -- 顺序容器 (Primer C++ 第五版 · 阅读笔记)
- CMake基础 第12节 设置C++标准