不要重复制造轮子,而且你造的轮子未必比得上别人的;

  • <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]));
    }

使用 STL 辅助解决算法问题的更多相关文章

  1. stl非变易算法(二)

    这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...

  2. STL非变易算法 - STL算法

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1394600460.html 原创:ST ...

  3. C++ STL 常用排序算法

    C++ STL 常用排序算法 merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列. 例如: vecIntA,vecIntB,vecIntC是用ve ...

  4. C++ STL 常用查找算法

    C++ STL 常用查找算法 adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-end. ...

  5. C++ STL 常用遍历算法

    C++ STL 常用遍历算法 STL的容器算法迭代器的设计理念 1) STL的容器通过类模板技术,实现数据类型和容器模型的分离 2) STL的迭代器技术实现了遍历容器的统一方法:也为STL的算法提供了 ...

  6. STL中的算法

    STL中的所有算法(70个) 参考自:http://www.cppblog.com/mzty/archive/2007/03/14/19819.htmlhttp://hi.baidu.com/ding ...

  7. STL中的算法小结

    ()要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> ()所有STL算法都被设计用来处理一个或多个 ...

  8. C++STL之整理算法

    这里主要介绍颠倒.旋转.随机排列和分类4中常见的整理算法 1.颠倒(反转) void reverse(_BidIt _First, _BidIt _Last) _OutIt reverse_copy( ...

  9. C++ STL之查找算法

    C++STL有好几种查找算法,但是他们的用法上有很多共同的地方: 1.除了binary_search的返回值是bool之外(查找的了返回true,否则返回false),其他所有的查找算法返回值都是一个 ...

随机推荐

  1. 紫书 习题 10-16 UVa 1647 (高精度+递推)

    这道题我已经推出00和1过两步变成00了,可我没有继续做下去-- 后来看了博客发现自己已经做了90%了-- 可惜了,以后不要轻易放弃. 1的个数有个规律,就是每次都乘以2,因为0和1下一步都会变出1 ...

  2. JS关键字 import

    今天开发时使用import作为方法名,报错 后查明报错原因:import是js中的关键字,在取方法名时不能取import

  3. Java Swing设置主窗体位置居中方法

    01.第一种方法 int windowWidth = frame.getWidth(); //获得窗体宽  int windowHeight = frame.getHeight(); //获得窗体高 ...

  4. 【HDOJ 5384】Danganronpa

    [HDOJ 5384]Danganronpa AC自己主动机. .. 当时感觉用字典树 标神也往自己主动机想来着..手太生加上时间紧迫也没敲--回来一看题解什么AB同一时候建自己主动机...顿时愣了 ...

  5. 在vim中配置python补全,fedora 19

    近期发现python是个不错的语言,值得一学,先配置下环境,让vim具有keyword补全功能,步骤例如以下,我这个是fedora,其它发行版类似 $ su ******** # yum instal ...

  6. Android实现本地图片选择及预览缩放效果仿春雨医生

    在做项目时常常会遇到选择本地图片的需求.曾经都是懒得写直接调用系统方法来选择图片.可是这样并不能实现多选效果.近期又遇到了,所以还是写一个demo好了.以后也方便使用.还是首先来看看效果 显示的图片使 ...

  7. 值得学习的html知识

    这里零度为大家推荐几个值得学习的html知识,很有用的哦! 一.打开窗口即最大化 <script language="javaScript"> <!-- Begi ...

  8. Zabbix快速入门

    模板的管理与使用 一 模板 模板是zabbix的核心,因为模板继承了所有要监控的内容,以及所要展示的图形等等,zabbix的安装部署完成之后,自带了很多模板(网络设备模板,操作系统模板,常用应用软件模 ...

  9. Android实现QQ分享及注意事项

    一.获取APPID和帮助文档 在前面我介绍了关于Android中微信分享的文章< Android实现微信分享及注意事项>这一篇文章来看看关于QQ分享. 可以参看新手引导和接入说明:http ...

  10. Kinect 开发 —— 近距离探测

    如何将Kinect设备作为一个近距离探测传感器.为了演示这一点,我们处理的场景可能在以前看到过.就是某一个人是否站在Kinect前面,在Kinect前面移动的是人还是什么其他的物体.当我们设置的触发器 ...