: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

C++基础知识【算法库 <algorithm>】

C++基础知识【算法库 <algorithm>】

C++ 标准库中的 <algorithm> 头文件提供了一组用于操作容器(如数组、向量、列表等)的算法。这些算法包括排序、搜索、复制、比较等,它们是编写高效、可重用代码的重要工具。

<algorithm> 头文件定义了一组模板函数,这些函数可以应用于任何类型的容器,只要容器支持迭代器。这些算法通常接受两个或更多的迭代器作为参数,表示操作的起始和结束位置。
语法

大多数 <algorithm> 中的函数都遵循以下基本语法:
  1. algorithm_name(container.begin(), container.end(), ...);
复制代码
这里的 container 是一个容器对象,begin() 和 end() 是容器的成员函数,返回指向容器开始和结束的迭代器。

实例
1. 排序算法

函数:sort

定义:对容器中的元素进行排序。

语法:
  1. sort(container.begin(), container.end(), compare_function);
复制代码
其中 compare_function 是一个可选的比较函数,用于自定义排序方式。

实例
  1. #include <algorithm>
  2. #include <vector>
  3. #include <iostream>

  4. int main() {
  5.     std::vector<int> numbers = {5, 2, 9, 1, 5, 6};
  6.     std::sort(numbers.begin(), numbers.end());

  7.     for (int num : numbers) {
  8.         std::cout << num << " ";
  9.     }
  10.     std::cout << std::endl;

  11.     return 0;
  12. }
复制代码
输出结果:

1 2 5 5 6 9

2. 搜索算法

函数:find

定义:在容器中查找与给定值匹配的第一个元素。

语法:
  1. auto it = find(container.begin(), container.end(), value);
复制代码
如果找到,it 将指向匹配的元素;如果没有找到,it 将等于 container.end()。
  1. #include <algorithm>
  2. #include <vector>
  3. #include <iostream>

  4. int main() {
  5.     std::vector<int> numbers = {1, 2, 3, 4, 5};
  6.     auto it = std::find(numbers.begin(), numbers.end(), 3);

  7.     if (it != numbers.end()) {
  8.         std::cout << "Found: " << *it << std::endl;
  9.     } else {
  10.         std::cout << "Value not found." << std::endl;
  11.     }

  12.     return 0;
  13. }
复制代码
输出结果:
Found: 3

3. 复制算法

函数:copy

定义:将一个范围内的元素复制到另一个容器或数组。

语法:
  1. copy(source_begin, source_end, destination_begin);
复制代码
  1. #include <algorithm>
  2. #include <vector>
  3. #include <iostream>

  4. int main() {
  5.     std::vector<int> source = {1, 2, 3, 4, 5};
  6.     int destination[5];
  7.     std::copy(source.begin(), source.end(), destination);

  8.     for (int i = 0; i < 5; ++i) {
  9.         std::cout << destination[i] << " ";
  10.     }
  11.     std::cout << std::endl;

  12.     return 0;
  13. }
复制代码
输出结果:

1 2 3 4 5

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

1.sort 函数

        sort 函数是 algorithm 中的排序函数,相较于 C stdlib 中的 qsort 函数,用法更简单,也更广泛,同时内部实现也要更复杂。

        对数组使用 sort 函数:
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;

  4. int main () {
  5.     int arr [10] = { 2,4,1,6,7,5,8,10,3,9 };

  6.     cout << "排序前的数组:";
  7.     for (int num : arr) {
  8.         cout << num << " ";
  9.     }
  10.     cout << endl;

  11.     sort (arr , arr + 10);

  12.     cout << "排序后的数组:";
  13.     for (int num : arr) {
  14.         cout << num << " ";
  15.     }
  16.     cout << endl;

  17.     system ("pause");
  18.     return 0;
  19. }
复制代码
注意:这里的参数是数组的地址。        

        对容器 vector 使用 sort 函数:
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;

  4. int main () {
  5.     vector<int> arr = { 2,4,1,6,7,5,8,10,3,9 };

  6.     cout << "排序前的数组:";
  7.     for (int num : arr) {
  8.         cout << num << " ";
  9.     }
  10.     cout << endl;

  11.     sort (arr.begin () , arr.end ());

  12.     cout << "排序后的数组:";
  13.     for (int num : arr) {
  14.         cout << num << " ";
  15.     }
  16.     cout << endl;

  17.     system ("pause");
  18.     return 0;
  19. }
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

2. reverse 函数

  reverse 函数是 algorithm 中的反转函数,常适用于字符串,但不仅仅可以对字符串使用。

        对 string 使用 reverse 函数:
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;

  4. int main () {
  5.     string s = "Hello world";

  6.     cout << "反转前的字符串:";
  7.     cout << s << endl;

  8.     reverse (s.begin () , s.end ());

  9.     cout << "反转后的字符串:";
  10.     cout << s << endl;

  11.     system ("pause");
  12.     return 0;
  13. }
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

3. max & min 函数

        max & min 函数是用来返回两变量之间较大(小)者的函数。
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;

  4. int main () {
  5.     int a , b;
  6.     a = 1;
  7.     b = 10;

  8.     cout << "a:" << a << "," << "b:" << b << endl;
  9.     cout << "较大者:" << max (a , b) << endl;
  10.     cout << "较小者:" << min (a , b) << endl;

  11.     system ("pause");
  12.     return 0;
  13. }
复制代码
4. max_element & min_element 函数

        该函数用于获取数组或容器中最大(小)的元素。
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;

  4. int main () {
  5.     vector<int> arr = { 1,2,3,4,5,6,7,8,9,0 };
  6.    
  7.     cout << "数组:";
  8.     for (int num : arr) {
  9.         cout << num << " ";
  10.     }
  11.     cout << endl;

  12.     cout << "最大者:";
  13.     cout << *max_element (arr.begin () , arr.end ()) << endl;
  14.     cout << "最小者:";
  15.     cout << *min_element (arr.begin () , arr.end ()) << endl;

  16.     system ("pause");
  17.     return 0;
  18. }
复制代码
注意:该函数的返回值是元素的地址(对于容器,返回迭代器)。
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

5. binary_search 函数

        函数一共三个参数,第一二个参数参照 sort 的参数,第三个参数是需要寻找的 key。
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>

  4. using namespace std;

  5. int main () {
  6.     vector<int> haystack{ 1, 3, 4, 5, 9 };
  7.     vector<int> needles{ 1, 2, 3 };

  8.     for (const auto needle : needles) {
  9.         cout << "正在搜索 " << needle << '\n';
  10.         if (binary_search (haystack.begin () , haystack.end () , needle))
  11.             cout << "找到了 " << needle << '\n';
  12.         else
  13.             cout << "没找到!\n";
  14.     }

  15.     system ("pause");
  16.     return 0;
  17. }
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表