标准库头文件:algorithm

1.常用操作

for_each(vec.begin(), vec.end(), [](int &n){ n++; });//将vector中的所有元素加一
for_each(vec.begin(), vec.end(), Sum());//Sum是重载operator()的类
for_each_n(vec.begin(), 3, [](auto& n){ n++; });//将vecotr第一个元素到第三个元素加一,C++17支持
count(vec.begin(), vec.end(), 3);//返回vec中3的个数
count_if(vec.begin(), vec.end(), [](int i){return i % 2 == 0;});//返回vec中偶数个数
find(vec.begin(), vec.end(), 3);//返回vec中3的位置,没有则返回end
find_if(vec.begin(), vec.end(), [](int x){ return x>4; });//返回vec中第一个大于4的位置,没有则返回end()
find_if_not(vec.begin(), vec.end(), [](int x){ return x>4; });//返回vec中第一个小于等于4的位置,没有则返回end()
search(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());//在vec1中搜索vec2,返回找到的位置,没有找到则返回end()
search_n(vec.begin(), vec.end(), 2, 2);//在vec中查找2个2,返回到的位置,没有找到则返回end()
copy(vec1.begin(), vec1.end(), vec2.begin());//将vec1拷贝到vec2的第一个元素位置,vec2要有足够的空间,返回vec2.begin()+vec1.size()迭代器
copy_if(vec1.begin(), vec1.end(), vec2.begin(), [](int x){ return x>4; });//将vec1中大于4的元素拷贝到vec2,返回vec2.begin()+(符合条件个数)迭代器
copy_n(vec1.begin(), 4, vec2.begin());//拷贝vec1开始的前4个字符到vec2的开头处
copy_backward(vec1.begin(), vec1.end(), vec2.end());//将vec1拷贝到vec2的最后一个元素位置,vec2要有足够的空间,返回vec2排在最前面元素的迭代器
move(vec1.begin(), vec1.end(), vec2.begin());//将vec1拷贝到vec2的第一个元素位置,vec2要有足够的空间,返回vec2.begin()+vec1.size()迭代器
move_backward(vec1.begin(), vec1.end(), vec2.end());//将vec1拷贝到vec2的最后一个元素位置,vec2要有足够的空间,返回vec2排在最前面元素的迭代器
fill(vec.begin(), vec.end(), 2);//将vec的所有元素填充成2
fill(vec.begin(), 5, 2);//将vec的前5个元素填充成2
transform(str.begin(), str.end(), str.begin(), [](char c) -> char { return toupper(c); });//将str的字符变成大写
transform(vec1.begin(), vec1.end(), vec2.begin(), [](int n) -> int { return ++n; });//将vec1中的所有元素加一,结果放在vec2中
transform(vec1.begin(), vec1.end(), vec2.begin(), vec1.begin(), [](int x, int y){ return x+y; });//vec1和vec2中对应位置的元素相加,结果存放在vec1中
remove(str1.begin(), str1.end(), ' ');//将str1中所有的空格移到末尾,并用不需要删除的值给他们赋值
str1.erase(remove(str1.begin(), str1.end(), ' '), str1.end());//删除str1中所有的空格
remove_if(str1.begin(), str1.end(), [](unsigned char x){return isspace(x);});//将str1中所有的空格移到末尾,并用不需要删除的值给他们赋值
str1.erase(remove_if(str1.begin(), str1.end(), [](unsigned char x){return isspace(x);}), str1.end());//删除所有空格,包括\t和\n
replace(vec1.begin(), vec1.end(), 2, 4);//将vector中所有2替换成4
replace_if(vec1.begin(), vec1.end(), [](int x){ return x>4; }, 4);//将vector中所有大于4的元素替换成4
reverse(vec1.begin(), vec1.end());//倒置一个vector
reverse_copy(vec1.begin(), vec1.end(), vec2.begin());//将倒置的vec1拷贝到vec2中,vec2要有足够的空间
unique(vec.begin(), vec.end());//将排好序的vec中的重复元素移到末尾
vec.erase(unique(vec.begin(), vec.end()), vec.end());//删除vec中的重复元素
unique_copy(vec1.begin(), vec1.end(), vec2.begin());//将vec1中非重复元素复制到vec2中
is_sorted(begin(vec), end(vec));//判断vec有没有按照升序排列
sort(vec.begin(), vec.end());//将vec升序排列
sort(vec.begin(), vec.end(), greater<int>());//将vec降序排列
lower_bound(vec1.begin(), vec1.end(), 6);//返回有序vecotr中第一个大于等于6的迭代器位置
upper_bound(vec1.begin(), vec1.end(), 6);//返回有序vecotr中第一个大于6的迭代器位置
binary_search(vec1.begin(), vec1.end(), 6);//在有序vector中查找6,找到返回true
pair<vector<int>::iterator, vector<int>::iterator> p = equal_range(vec1.begin(), vec1.end(), 6);//p.first是lower_bound的返回结果,p.second是upper_bound的返回结果
merge(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), vec3.begin());//将两个有序vector合并到vec3中
includes(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());//判断vec2是否是vec1的子集,是则返回true
set_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), std::back_inserter(vec3));//将vec1-vec2的差集放进vec3,算之前要排序
set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), inserter(vec3, vec3.begin()));//将vec1和vec2的交集放进vec3,算之前要排序
set_union(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), vec3.begin());//将vec1和vec2的并集放进vec3,算之前要排序
make_heap(vec1.begin(), vec1.end());//将vec1变成一个堆,最大元素在最前面
is_heap(vec1.begin(), vec1.end());//判断vec1是否是一个堆
push_heap(vec1.begin(), vec1.end());//将新push_back()的元素加入堆中
pop_heap(vec1.begin(), vec1.end());//将堆顶元素弹出,没有返回值
sort_heap(vec1.begin(), vec1.end());//将堆变成排好序的区间
template< class T >
const T& max( const T& x, const T& y ); //返回x和y中更大的值
template< class T >
T max( std::initializer_list<T> ilist );
max( { "foo", "bar", "hello" }, [](const string& s1, const string& s2) {return s1.size() < s2.size();});//返回三个字符串中长度最长的一个
max_element(vec1.begin(), vec1.end());//返回区间中的最大元素的迭代器位置
min(x, y);//返回x和y中更小的值
min( { "foo", "bar", "hello" }, [](const string& s1, const string& s2) {return s1.size() < s2.size();});//返回三个字符串中长度最短的一个
min_element(vec1.begin(), vec1.end());//返回区间中的最小元素的迭代器位置
equal(vec1.begin(), vec1.end(), vec2.begin());//判断vec2中是否有vec1的序列,如果有返回true
clamp(x, 0, 10);//如果x在[0,10]则返回x,否则返回0或10,c++17支持

2.不常用操作

all_of(vec.cbegin(), vec.cend(), [](int i){ return i % 2 == 0; }));//vector中是否所有的元素都满足谓词
any_of(vec.cbegin(), vec.cend(), [](int i){ return i % 2 == 0; }));//vector中是否存在元素满足谓词
none_of(vec.cbegin(), vec.cend(), [](int i){ return i % 2 == 0; }));//vector中是否所有的元素都不满足谓词
pair<string::iterator, string::reverse_iterator> p = mismatch(str.begin(), str.end(), str.rbegin());//查找两个范围第一个不同元素的位置
find_end(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());//返回在vec1中最后符合vec2序列的位置,没有则返回end()
find_first_of(vec1.begin(), vec1.end(), vec2.begin(), vec2.end());//返回在vec1中第一个符合vec2中元素的位置,没有则返回end()
adjacent_find(vec.begin(), vec.end());//返回vec中第一对相邻元素相同的位置
generate(vec.begin(), vec.end(), [n = 0] () mutable { return n++; });//给vec赋值,0,1,2,3,mutable表示n是可变的
generate_n(vec.begin(), 3, [n = 0] () mutable { return n++; });//给vec赋值3个元素,0,1,2,mutable表示n是可变的
remove_copy(str1.begin(), str1.end(), str2.begin(), 'a');//将str1中除a字符之外的字符赋值到str2中,str2要有足够的空间
remove_copy_if(str1.begin(), str1.end(), str2.begin(), [](unsigned char x){return isspace(x);});//将str1中满足谓词的字符赋值到str2中,str2要有足够的空间
replace_copy(vec1.begin(), vec1.end(), vec2.begin(), 2, 4);//将vec1的元素复制到vec2中,并且把所有的2替换成4
replace_copy_if(vec1.begin(), vec1.end(), vec2.begin(), [](int x){ return x>4; }, 4);//将vec1的元素复制到vec2中,并且把所有的大于4的元素替换成4
swap(str1, str2);//交换两个string,可以交换pair,tuple,vector,list,deque,map,set等等
rotate(vec1.begin(), vec1.begin()+2, vec1.end());//将vec1开始的前两个元素移到vec1的末尾
rotate_copy(vec1.begin(), vec1.begin()+2, vec1.end(), vec2.begin());//将vec1开始的前两个元素移到vec1的末尾,复制到vec2中
random_shuffle(vec.begin(), vec.end());//随机打乱vec
shuffle(vec.begin(), vec.end(), g);//用指定算法打乱vec,random_device rd; mt19937 g(rd());
pair<int, int> p = minmax(x, y);//返回x,y中的更小和更大值
pair<vector<int>::iterator, vector<int>::iterator> p = minmax_element(vec1.begin(), vec1.end());//返回区间中的最小值和最大值的迭代器pair

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值