C++系列二:STL教程-常用算法

这篇具有很好参考价值的文章主要介绍了C++系列二:STL教程-常用算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

还有一些我在尝试中迷惑不解的,有点玄幻。文章来源地址https://www.toymoban.com/news/detail-637029.html


算法列举:

  1. 排序算法:
sort(first, last);
stable_sort(first, last);
partial_sort(first, middle, last);
partial_sort_copy(first, last, result_first, result_last);
nth_element (first, nth, last);
is_sorted (first, last);
is_sorted_until (first, last);
  1. 合并算法:
merge(first1,last1,first2,last2,result);
inplace_merge (first,middle,last);
  1. 查找算法:
 find (first, last, val);
 find_if (first, last, pred);
 find_if_not (first, last, pred);
 find_end (first1, last1, first2, last2);
 find_first_of(first1, last1, first2, last2);
 adjacent_find(first, last);
 search(first1, last1, first2, last2);
 search_n(first, last, count, val);

 lower_bound (first, last,val);
 upper_bound (first, last,val);
 pair<ForwardIterator,ForwardIterator> equal_range (first, last, val);
 binary_search(first, last,val);
  1. 筛选分组算法:
partition (first,last,pred);
stable_partition (first,last,pred);
pair<OutputIterator1,OutputIterator2> partition_copy (
  first, last, result_true, result_false, pred);
partition_point(first,last,pred);
  1. 其他:
all_of (first,last,pred);
any_of (first,last,pred);
none_of(first,last,pred);
equal (First1, Last1, First2);
mismatch(First1, Last1, First2)lexicographical_compare(first1, last1, first2, last2);
next_permutation(first, last);
prev_permutation(first, last) 
is_permutation(First1, Last1, First2)copy_n(first,n,result);
copy_if(first1,last,result,pred);
copy_backward(first1,last,result);
reverse_copy(first1,last,result);
unique(it_1,it_2,MyFunc);
rotate(first,middle,last);
rotate_copy(first,middle,last,last);
move();
swap_ranges(First1, Last1, First2)remove(first1,last1,value);
remove_copy(first,last,result,value);
remove_if(first,last,result,value);
remove_copy_if(first,last,result,pred);
fill(first, last,val);
fill_n(first,n,value);
generate(first,last,gen);
generate_n(first,last,gen);

transform(first1,last1,first1,result,binary_op)
replace(_First,_Last,_OldVal,_NewVal);
replace_if(_First,_Last,_Pred,_Val);
replace_copy(_First,_Last,_Result,_OldVal,_NewVal);
replace_copy_if_if(_First,_Last,_Result,_Pred,_Val);

算法例子

vector<int> vec{ 3, 2, 5, 4, 1, 6, 9, 7 };
vector<int> vecCopy(5);
vector<int> vecFirst{1,3,5,7};
vector<int> vecSecond{ 2,4,6,8 };
vector<int> vecMerge(8);
vector<int> vecInplace{ 5,10,15,20,25,7,17,27,37,47,57 };
for (int i: vecInplace) {cout << i;}

//1. 排序
// Compare: less<int>()、 greater<int>()、[](int a,int b) {return a<b;} 升序
// 默认升序

//sort() 排序
sort(vec.begin(), vec.end());
sort(vec.begin(), vec.end(),less<int>())

//stable_sort() 还可以保证不改变相等元素的相对位置。

//partial_sort() 从指定区域中提取出部分数据 对它们进行排序
partial_sort(vec.begin(), vec.begin() + 4, vec.end());// 最小的 4 个元素移动到开头位置并排好序
partial_sort(vec.begin(), vec.begin() + 4, vec.end(), [](int a, int b) {return a > b; });//????不太懂

//partial_sort_copy() 不对原有数据变动,将部分元素拷贝到另外的数组或容器中,然后再对这部分元素进行排序。
partial_sort_copy(vec.begin(),vec.end(),vec1.begin(),vecCopy.begin()+5);

//nth_element() 该函数可以从某个序列中找到第 n 小的元素 K,并将 K 移动到序列中第 n 的位置处。
//整个序列经过 nth_element() 函数处理后,所有位于 K 之前的元素都比 K 小,所有位于 K 之后的元素都比 K 大。
nth_element(vec.begin(), vec.begin() + 2, vec.end()); //? ? ? ? 不太懂

//is_sorted()判断其是否已经排序好
bool flag = is_sorted(vec.begin(), vec.end());

//is_sorted_until() 不仅能检测出某个序列是否有序,还会返回一个正向迭代器,该迭代器指向的是当前序列中第一个破坏有序状态的元素。
vector<int>::iterator demo = is_sorted_until(vec.begin(),vec.end()); 	cout << *demo;


//2.合并
//merge()将两个有序集合合并为一个有序序列
merge(vecFirst.begin(),vecFirst.end(),vecSecond.begin(),vecSecond.end(), vecMerge.begin());

//inplace_merge() 当 2 个有序序列存储在同一个数组或容器中时,如果想将它们合并为 1 个有序序列 (我觉得有病,直接一个排序不就得了,真是折腾。)
inplace_merge(vecInplace.begin(), vecInplace.begin() + 5, vecInplace.begin() + 11);

//3.查找
//find() 用于在指定范围内查找和目标元素值相等的第一个元素。
cout << *find(vec.begin(),vec.end(),5);

//find_if()、find_if_not() 符合规则;不符合规则
cout << *find_if(vec.begin(), vec.end(), [](int i) {return ((i % 2) == 0); });//????不太懂

//有点费力,下次再来。
	//一元转换和二元转换 用于转换元素
	//vector<int> vec1{ 3, 2, 5, 4, 1, 6, 9, 7 };
	//vector<int> vec2{ 3, 2, 5, 4, 1, 6, 9, 7 };
	//vector<int> vecTransform(8, 0);
	//transform(vec1.begin(), vec1.begin()+5, vec2.begin(), [](int i) {return i + 1; });
	//transform(vec1.begin(), vec1.end(), vec2.begin(), vecTransform.begin(), [](int a, int b) {return a + b; });
	//for (int i : vecTransform) { cout<<i; }

	//replace() 替换
	//vector<int> vecRep1{ 3, 2, 5, 4, 1, 6, 9, 7 };
	//vector<int> vecRep2(8);
	//replace(vecRep1.begin(),vecRep1.end(),1,100);
	//replace_copy(vecRep1.begin(), vecRep1.end(),vecRep2.begin(),1,100);
	//replace_if(vecRep1.begin(), vecRep1.end(), [](int i) {return i > 3; },100 );
	//replace_copy_if(vecRep1.begin(), vecRep1.end(), vecRep2.begin(), [](int i) {return i > 3; }, 100);
	//for (int i: vecRep2) { cout << i; }

	// generate()、fill() 赋值
	//vector<int> vecG(5);
	//int flag = 1;
	//generate(vecG.begin(), vecG.end(), [&flag]() {return flag++; });
	//generate_n(vecG.begin(),3, [&flag]() {return flag++; });
	//fill(vecG.begin(), vecG.end(), 1);
	//fill_n(vecG.begin(),3, 1);
	//for (int i :vecG) { cout << i; };

	// remove() 素覆盖它来实现移除的????大疑问
	//vector<int> vecRe{1, 2, 3, 4,5};
	//vector<int> vecRe2(5);
	//remove(vecRe.begin(),vecRe.end(),3); //12455 
	//remove_copy(vecRe.begin(),vecRe.end(), vecRe2.begin(),3); //12450 
	//remove_if(vecRe.begin(), vecRe.end(), [](int i) {return i = 4; });
	//remove_copy_if(vecRe.begin(), vecRe.end(), vecRe2.begin(), [](int i) {return i = 4; });
	//for (auto i : vecRe){cout << i;}
	
	//for_each()循环
	vector<int> vecFor{1, 2, 3, 4, 5};
	for_each(vecFor.begin(), vecFor.end(), [](int i) {cout << i; });

到了这里,关于C++系列二:STL教程-常用算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STL- 常用算法

    概述 : 算法主要是由头文件 algorithm functional numeric 组成。 algorithm 是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 numeric 体积很小,只包括几个在序列上面进行简单数学运算的模板函数 functional 定义了一些模板类,用以声明函数对象。

    2024年02月09日
    浏览(28)
  • STL中的常用算法详解

    STL的算法主要是由下面的头文件组成的。 1.algorithm是所有STL头文件中最大的一个范围涉及到比较、交换、查找、遍历操作、复制、修改等等算法的头文件。 2.numeric体积很小,只包括几个再序列上面进行简单数学运算的模板函数。 3.functional定义了一些模板类,用以声明函数对

    2024年02月15日
    浏览(26)
  • 第九层(16):STL终章——常用集合算法

    🎉welcome🎉 ✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。 ✈️C++专栏:C++爬塔日记 😘博客制作不易,👍点赞+⭐收藏+➕关注 在上一块

    2024年02月02日
    浏览(25)
  • C++:stl:list的常用接口及其模拟实现

    本文主要介绍c++:stl中list常用接口的功能及使用方法,比较list与vector的区别,并对list的常用接口进行模拟实现。 目录 一、list的介绍和使用 1.list介绍 2.list使用 1.list的构造 2.list iterator的使用 3.list 容量相关 4.list元素访问 5.list修改 6.list的迭代器失效 二、list的模拟实现 1.l

    2024年02月07日
    浏览(39)
  • 【C++】STL 算法概念和分类 ( STL 算法头文件 | STL 算法思想 - 数据与算法分离 | STL 算法 迭代器 | STL 算法 操作对象 | STL 算法分类 )

    标准模板库 STL 算法 都定义在 algorithm , numeric 和 functional 三个头文件中 ; 使用 STL 标准模板库 算法时 , 导入上述 3 个头文件 , 导入时根据需求导入即可 , 不必都导入 ; algorithm 头文件 是 3 个 STL 算法头文件中 包含算法最多的一个 , 包含常用的 : 比较算法、交换算法、查找算法

    2024年01月21日
    浏览(42)
  • [C++] STL_list常用接口的模拟实现

    list文档介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主

    2024年02月10日
    浏览(37)
  • [C++] STL_vector使用与常用接口的模拟实现

    vector文档介绍 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。 本质讲,

    2024年02月11日
    浏览(26)
  • 【嵌入式——C++】算法(STL)

    需要引入头文件 #include algorithm 遍历容器。 代码示例 搬运容器到另一个容器中。参数1 原容器起始迭代器,参数2 原容器结束迭代器,参数3 目标容器开始迭代器 参数4 函数或者仿函数。 代码示例 查找元素,查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器

    2024年02月19日
    浏览(29)
  • 8.1 C++ STL 变易拷贝算法

    C++ STL中的变易算法(Modifying Algorithms)是指那些能够修改容器内容的算法,主要用于修改容器中的数据,例如插入、删除、替换等操作。这些算法同样定义在头文件 algorithm 中,它们允许在容器之间进行元素的复制、拷贝、移动等操作,从而可以方便地对容器进行修改和重组

    2024年02月12日
    浏览(28)
  • C++(15): STL算法:排序(sort)

            std::sort 是 C++ 标准库 algorithm 中提供的一个函数,用于对容器(如数组、向量等)中的元素进行排序。它基于比较操作对元素进行排序,通常使用高效的排序算法,如快速排序、归并排序或堆排序等。         在实际应用中,std::sort 通常会根据输入数据的大

    2024年04月12日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包