• 使用 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]));
      }
  • 相关阅读:
    测试杯子
    如何测试网页的登录页面
    功能性测试之边界值测试
    自动化 sample
    软件架构---敏捷和架构的关系
    软件架构---分布式后端架构应该考虑的一些方面
    软件架构---集群与负载均衡
    软件架构---从需求明确架构设计驱动力
    软件架构---质量属性的实现
    软件架构---质量属性(二)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9423902.html
Copyright © 2020-2023  润新知