不修改数据的算法

  • count, min and max, compare, linear search, attribute
// 算法中Lambda函数很常用:
num = count_if(vec.begin(), vec.end(), [](int x){return x<10;}); bool lessThan10(int x) {
return x<10;
} vector<int> vec = {9,60,90,8,45,87,90,69,69,55,7};
vector<int> vec2 = {9,60,70,8,45,87};
vector<int>::iterator itr, itr2;
pair<vector<int>::iterator, vector<int>::iterator> pair_of_itr; // C++ 03: 一些算法可以在tr1或者boost中找到
vector<int> vec = {9,60,90,8,45,87,90,69,69,55,7};
  1. 计数 Counting

    int n = count(vec.begin()+2, vec.end()-1, 69);   // 2 元素值等于69的个数
    int m = count_if(vec.begin(), vec.end(), [](int x){return x==69;}); // 3 元素满足谓词的个数
    int m = count_if(vec.begin(), vec.end(), [](int x){return x<10;}); // 3
  2. 最大小值 Min and Max

    itr = max_element(vec.begin()+2, vec.end());  // 90 返回第一个最大元素的迭代器
    
    itr = max_element(vec.begin(), vec.end(),
    [](int x, int y){ return (x%10)<(y%10);}); // 9 自定义比较函数 // 大多数算法有一个简单形式和一个更通用的形式 itr = min_element(vec.begin(), vec.end()); // 7
    // 通用形式的min_element() pair_of_itr = minmax_element(vec.begin(), vec.end(), // {60, 69}
    [](int x, int y){ return (x%10)<(y%10);});
    // 返回一个pair, 包含第一个最小值和最后一个最大值
  3. 线性搜索(当数据未排序时使用)

    //    返回第一个匹配的
    itr = find(vec.begin(), vec.end(), 55); itr = find_if(vec.begin(), vec.end(), [](int x){ return x>80; }); itr = find_if_not(vec.begin(), vec.end(), [](int x){ return x>80; }); itr = search_n(vec.begin(), vec.end(), 2, 69); // 连续2个69
    // 通用形式的search_n() // 搜索子串
    vector<int> sub = {45, 87, 90};
    itr = search( vec.begin(), vec.end(), sub.begin(), sub.end());
    // 搜索第一个匹配的子串
    itr = find_end( vec.begin(), vec.end(), sub.begin(), sub.end());
    // 搜索最后一个匹配的子串
    // 通用形式: search(), find_end() // 搜索任意一个
    vector<int> items = {87, 69};
    itr = find_first_of(vec.begin(), vec.end(), items.begin(), items.end());
    // 搜索任意一个在items中的元素
    itr = find_first_of(vec.begin(), vec.end(), items.begin(), items.end(),
    [](int x, int y) { return x==y*4;});
    // 搜索任意一个在items中的元素,且满足谓词 // 搜索相邻
    itr = adjacent_find(vec.begin(), vec.end()); // 搜索相邻两个相同的元素
    itr = adjacent_find(vec.begin(), vec.end(), [](int x, int y){ return x==y*4;});
    // 通用版本,自定义谓词
  4. 范围比较

    if (equal(vec.begin(), vec.end(), vec2.begin())) {
    cout << "vec and vec2 are same.\n";
    } if (is_permutation(vec.begin(), vec.end(), vec2.begin())) {
    cout << "vec and vec2 have same items, but in differenct order.\n";
    } pair_of_itr = mismatch(vec.begin(), vec.end(), vec2.begin());
    // 找到第一个不同的元素
    // pair_of_itr.first是vec的迭代器
    // pair_of_itr.second是vec2的迭代器 //词典比较: 用"less than"逐元素比较
    lexicographical_compare(vec.begin(), vec.end(), vec2.begin(), vec2.end());
    // {1,2,3,5} < {1,2,4,5}
    // {1,2} < {1,2,3} // 通用形式:
    // equal(), is_permutation(), mismatch(), lexicographical_compare()
  5. 检查属性

    is_sorted(vec.begin(), vec.end());  // 检查vec是否排序
    
    itr = is_sorted_until(vec.begin(), vec.end());
    // itr指向第一个不满足排序的元素
    // 通用形式: is_sorted(), is_sorted_until() is_partitioned(vec.begin(), vec.end(), [](int x){return x>80;} );
    // 检查vec是否由谓词的条件分成了两个部分(x>80) is_heap(vec.begin(), vec.end()); // 检查vec是否是一个堆,heap
    itr = is_heap_until(vec.begin(), vec.end()); // 找到第一个不是堆的位置 // 通用形式: is_heap(), is_heap_until()
  6. All, any, none

    all_of(vec.begin(), vec.end(), [](int x) {return x>80} );
    // 所有的元素都满足 any_of(vec.begin(), vec.end(), [](int x) {return x>80} );
    // 任意一个元素满足 none_of(vec.begin(), vec.end(), [](int x) {return x>80} );
    // 所有元素都不满足

最新文章

  1. salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※
  2. 在Swift项目中使用cocoaPods导入第三方OC库
  3. R语言画全基因组关联分析中的曼哈顿图(manhattan plot)
  4. JSON上
  5. Django进阶篇(一)
  6. 使用Webdriver执行JS小结
  7. spring获取webapplicationcontext,applicationcontext几种方法详解
  8. windows10 IOT +Azure会议概要总结
  9. 【线段树/数学/扩展欧几里得】 Bzoj 3913:奇数国
  10. std::move()和std::forward()
  11. 在多台服务器上简单实现Redis的数据主从复制
  12. 浅尝key-value数据库(二)——MongoDB的优与劣
  13. 使用SQLite做本地数据缓存的思考
  14. Java开发笔记(二十八)布尔包装类型
  15. 解决用try except 捕获assert函数产生的AssertionError异常时,导致断言失败的用例在测试报告中通过的问题
  16. 抽象代数-p22商群
  17. Javascript你必须要知道的面试题
  18. WPF ComboBox SelectionChanged事件里赋值Text的解决方法
  19. COMBINATORIAL TESTING
  20. 【大数据】Scala学习笔记

热门文章

  1. 基于hiredis,redis C客户端封装
  2. CCF-棋局评估 201803-04(版本 2.0)------(之前写了一个臃肿的1.0版 ,还沾沾自喜 233)
  3. poj-1657 Distance on Chessboard
  4. python筛选特定文件的信息按照格式输出到txt
  5. react 简书开发笔记
  6. ethr 微软开源的tcp udp http 网络性能测试工具
  7. Vision GUI programming products
  8. highcharts 知识点
  9. git 常见命令 和 git 原理图
  10. php 内网/外网ip判断