使用 STL 辅助解决算法问题
来源:互联网 发布:淄博网站seo 编辑:程序博客网 时间:2024/05/29 03:45
不要重复制造轮子,而且你造的轮子未必比得上别人的;
<numeric>⇒ accumulate,累积容器中区间的和,可以指定初值;
为什么 STL 中的容器和算法一定关于区间的操作一定是左闭右开的呢?
- int A[n]; ⇒ sort(A, A+n);
- vector<int> ⇒ sort(A.begin(), A.end());
都是很自然的一件事;
1. next_permutation ⇒ 获取下一次的全排列
- 所在的头文件:<algorithm>
- bool next_permutation(_BidIt _First, _BidIt _Last)
- 功能:对一个可迭代序列,直接在原始序列上进行更易,自然属于更易型算法。
- 算法意义:对全部样本空间进行穷举搜索;
#include <algorithm|vector|iterator|iostream>using namespace std;int main(int, char**){ vector<int> vec{ 1, 2, 3 }; // 也可以使用一维数组,int arr[] = {1, 2, 3}; int cnt = 0; do{ copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " ")); // copy(arr, arr+3, ....) cout << endl; cnt += 1; } while (next_permutation(vec.begin(), vec.end())); // while(next_permutation(arr, arr+3)); cout << "A_3^3 = " << cnt << endl; return 0;}
2. 容器
string 与 char []
string(字符串)与字符数组类型相比,可以避免一些额外的参数,比如需要一对指针标识当前访问的区间:
void foo(char *A[], int lo, int hi){ ... foo(A, lo, hi);}void foo(string& s){ ... s.substr(lo, hi-lo+1);}
3. 算法
排序:sort
int A[n];sort(A, A+n);
去重:unique(hash 表实现?)
unique(A, A+n);
一定要注意,
unique(A, A+n) - A
⇒ 去重后数组的大小;
4. pair
头文件 <utility>
常用来记录二维属性信息,比如一个会议的开始和结束时间;
int begin[101], end[101];vector<pair<int, int>> order;for (int i = 0; i < n; ++i){ order.push_back(make_pair(end[i], begin[i]));}
0 0
- 使用 STL 辅助解决算法问题
- 使用STL解决八皇后问题
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- Android解决使用findViewById时需要对返回值进行类型转换问题的辅助类
- c++ stl 算法使用
- STL 算法使用
- STL算法使用
- STL vector 辅助函数
- 使用非递归算法解决迷宫问题
- 使用遗传算法解决TSP问题
- 【算法】使用大根堆,解决top_k问题
- stl::string 使用问题
- 解决Struts配置文件没有代码辅助的问题
- 算法第三节:使用递归算法解决“阶乘”问题
- STL vector 的使用算法
- AES加解密算法,使用Base64做转码以及辅助加密
- oracle数据库互操作dblink使用方法
- 信息采集
- Hibernate框架开发笔记 lesson5
- 嗯~有意思的Dialog动画
- http协议
- 使用 STL 辅助解决算法问题
- HTTP协议详解
- 关于JDBC导入mysql的jar驱动的头痛
- sping boot devtools 不生效解决办法
- Android中播放本地SD卡中歌曲需要的添加的权限
- SVN 代码版本管理软件
- Snoopy
- Android之Baseline/Main/High
- ScrollView嵌套ViewPager问题解决方案