使用 STL 辅助解决算法问题
2024-08-31 18:45:01
不要重复制造轮子,而且你造的轮子未必比得上别人的;
<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]));
}
最新文章
- 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)
- Beanstalkd一个高性能分布式内存队列系统
- MySQL 5.6 中的 TIMESTAMP 和 explicit_defaults_for_timestamp 参数
- Thread的第五天学习
- [AngularJS] Services, Factories, and Providers -- value &; Providers
- js-权威指南学习笔记8
- web报表工具FineReport使用中遇到的常见报错及解决办法(二)
- 【题解】Hanoi塔问题
- 介绍一款自动给添加不同浏览器CSS3前缀的插件~Autoprefixer(附其他前端开发插件)
- php图文合成文字居中(png图片合成)
- Python问题汇总
- [LeetCode_105]Construct Binary Tree from Preorder and Inorder Traversal
- Xcode常见设置
- React Js 之JSX
- Android之计算两个时间的相差
- 设计模式入门,适配器模式,c++代码实现
- Maven 私服安装和启动
- Flask - 第一篇
- win7 php连接远程oracle
- Qt快速入门学习笔记(基础篇)
热门文章
- Centos7部署phpMyAdmin系统
- shell中IF的用法介绍
- 商业模式(三):P2P网贷平台,毛利润测算
- 洛谷 P1964 【mc生存】卖东西
- CentOs虚拟机能够互相ping通,但无法訪问虚拟机服务
- c++中六种构造函数的实现以及9中情况下,构造函数的调用过程
- Reuse Is About People and Education, Not Just Architecture
- java.lang.IllegalArgumentException: The observer is null.终于解决方式
- SSL通关之代码演示样例(四)
- Python: PS 滤镜--扇形变换