标准库头文件: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()+(符合条件个数)迭代器

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中第一对相邻元素相同的位置

 

上一篇:FCC_Intermediate Algorithm_Spinal Tap Case


下一篇:C++STL中algorithm里find()函数