zoukankan      html  css  js  c++  java
  • 使用 STL 辅助解决算法问题

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

    • <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]));
      }
  • 相关阅读:
    垃圾回收的可触及性
    常用的垃圾回收算法
    石子归并(区间dp 模板)
    D. Zero Quantity Maximization ( Codeforces Round #544 (Div. 3) )
    Parity game(带权并查集+离散化)
    Supermarket(贪心/并查集)
    D. Nested Segments(树状数组、离散化)
    dijkstra,belllman-ford,spfa最短路算法
    重载符
    Electrification Plan 最小生成树(prim+krusl+堆优化prim)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423902.html
Copyright © 2011-2022 走看看