STL实现基本原理

C++个人学习记录01

  1. 容器用于装数据,容器可以嵌套容器

  2. 容器种类

    1. 序列式容器:容器元素在容器的位置,是由进入容器的时间和地点决定
    2. 关联容器:以容器的规则决定元素在容器的位置
  3. 算法:解决某一个问题

    1. STL算法:例如遍历,查找,删除,统计…
  4. 注意容器和算法的设计是分离的,中间需要建立某种关联,这就是迭代器的作用。容器提供迭代器,算法拿迭代器。
    在这里插入图片描述

  5. 注意:v.begin() 是一个迭代器,它指向容器 v 的第一个元素。

  6. 案例1:统计容器中值为 4 的元素出现的次数

    1. 包含 <vector> 头文件以使用 vector 容器。

    2. 包含 <algorithm> 头文件以使用其中的算法。

    3. 创建了一个 vector<int> 类型的容器 v,并向其中添加了一些整数元素。

    4. 使用迭代器 pStart 遍历容器中的元素,并将每个元素打印出来。

    5. 使用 std::count 算法统计容器中值为 4 的元素出现的次数,并将结果打印出来。

      #include<vector>
      // vector 是一种序列式容器,它提供了动态数组的功能,允许在容器的尾部快速添加和删除元素,并支持随机访问。
      // 通过包含 <vector> 头文件,你可以在你的 C++ 程序中使用 vector 容器,从而能够利用其提供的功能
      // 动态数组容器
      #include<algorithm>
      // 这个头文件包含了许多常用的算法,如排序、查找、计数、替换等
      #include<iostream>
      using namespace std;
      
      void test01(){
          // 创建容器,指定vector是int类型,创建一个名为 v 的空的整数类型 vector 容器
          vector<int> v;//泛性编程,创建一个容器 动态数组 指定这个容器中放的数据类型
          v.push_back(10);//通过vector提供的成员方法,向容器的尾部添加元素
          v.push_back(4);
          v.push_back(5);
          v.push_back(4);
      
          // 创建了一个名为 pStart 的迭代器,它指向 vector<int> 类型的容器 v 的第一个元素。
          // vector<int>::iterator:这部分声明了一个迭代器类型,表示这个迭代器可以用来遍历 vector<int> 类型的容器。
          // pStart:这是迭代器的名称
          // v.begin():这是获取容器 v 中第一个元素的迭代器的方法。begin() 函数返回一个指向容器第一个元素的迭代器。
          vector<int>::iterator pStart = v.begin(); //拿到了指向第一个元素的迭代器
          vector<int>::iterator pEnd = v.end();//指向最后一个元素的下一个位置
          // 如果两个重合则遍历完了
      
          // 这段代码使用迭代器 pStart 来遍历容器中的元素,
          // 并将每个元素打印出来,直到达到容器末尾。
          while (pStart!=pEnd){//判断迭代器 pStart 是否等于迭代器 pEnd
              cout <<*pStart << " ";//打印迭代器 pStart 指向的元素的值,*pStart 表示获取迭代器
              // pStart 指向的元素的值,并将其打印出来。
              pStart++;
          }
          cout <<endl;//在控制台输出一个换行符
      
          // 使用了 <algorithm> 头文件中的 std::count 算法,
          // 统计容器中某个元素的个数,算法需要迭代器来用,为什么不用pStart因为已经被++l
          int n = count(v.begin(),v.end(),4);
          //v.begin()统计范围的起始位置,这里是容器 v 的第一个元素的迭代器
          // v.end():表示统计范围的结束位置,这里是容器 v 的末尾元素的下一个位置的迭代器。
          // 注意,std::count 会遍历从起始位置到结束位置之前的所有元素,但不包括结束位置本身。
          // 4:表示要统计的值,即要在容器中统计出现的次数的值
          cout <<"n:"<< n <<endl;
      
      }
      
      int main(){
          test01();
      }
      
          // 输出:10 4 5 4 
          // n:2
      
  7. 容器可以放类或对象

    1. 注意:Teacher 是一个类,它描述了教师的属性。当你使用该类来创建一个具体的教师对象时,才会产生对象

    2. 案例2:定义一个类,容器里放对象

      // 定义了一个名为 Teacher 的类,其中包含一个构造函数,
      // 用于初始化 Teacher 对象的属性 ID 和 age。。
      class Teacher{
          public:
              Teacher(int id, int age):ID(id),age(age){}
              // 这句话构造函数,它带有两个参数 id 和 age,用于初始化 Teacher 对象的属性 ID 和 age。
              // 在构造函数的初始化列表中,通过 ID(id) 和 age(age) 分别将参数的值赋给了 ID 和 age 成员变量。
              // 例如:Teacher teacher1(12345, 35);  // 创建一个教师对象,并设置 ID 为 12345,age 为 35
              int ID;
              int age;
      };
      
      
      void test02(){
          vector<Teacher> v;
          Teacher t1(1,2),t2(3,4),t3(5,6);
          v.push_back(t1);
          v.push_back(t2);
          v.push_back(t3);
      
          vector<Teacher>::iterator pStart = v.begin();
          vector<Teacher>::iterator pEnd = v.end();
      
          while(pStart!=pEnd){
              // 这里的*pStart就是一个个Teacher对象
              Teacher t = *pStart;
              cout<<"ID:"<<t.ID<<"AGE:"<<t.age<<endl;
              pStart++;
          }
      }
      
          //main函数
      			test02();
          // 输出:ID:1AGE:2
          // ID:3AGE:4
          // ID:5AGE:6
      
  8. 容器可以放指针

    void test03(){
        vector<Teacher*> v;//容器中放Teacher类型指针
        // 创建了一个 vector 容器 v,它可以存储 Teacher* 类型的指针。
        // 这意味着容器中的每个元素都是指向 Teacher 对象的指针。
        
    
        // 创建了三个 Teacher 对象 t1、t2 和 t3,
        // 分别用给定的参数初始化它们的属性 ID 和 age。
        Teacher t1(1,2),t2(3,4),t3(5,6);
    
        // 创建了三个 Teacher* 类型的指针 p1、p2 和 p3,
        // 并将它们指向对应的 Teacher 对象。
        Teacher* p1 = &t1;
        Teacher* p2 = &t2;
        Teacher* p3 = &t3;
    
        // 指向 Teacher 对象的指针 p1、p2 和 p3 分别添加到容器 v 中
        v.push_back(p1);
        v.push_back(p2);
        v.push_back(p3);
        
        // 要遍历就要迭代器
        vector<Teacher*>::iterator pStart = v.begin();
        //指向第一个元素的迭代器
        vector<Teacher*>::iterator pEnd = v.end();
    
        //遍历
        while(pStart!=pEnd){
            // 这里的*pStart就是一个个Teacher类型的指针
            Teacher* ttemp = *pStart;
            cout<<"ID:"<<ttemp->ID<<" AGE:"<<ttemp->age<<endl;
            pStart++;
        }
    
    }
    
        test03();
        // 输出:ID:1 AGE:2
        // ID:3 AGE:4
        // ID:5 AGE:6
    
  9. 案例四

    #define CRT_SECURE_NO_WARNINGS
    
    #include<iostream>
    using namespace std;
    
    // pStart:指向要统计范围的起始位置的指针。
    // pEnd:指向要统计范围的结束位置的下一个位置的指针。
    // value:要统计出现次数的值。
    int mycount(int* pStart, int*pEnd, int value){
        int n = 0;
        while(pStart != pEnd){
            if(*pStart == value){
                n++;
            }
            pStart++;
        }
        return n;//注意这里要返回n
    }
    
    int main(){
        int arr[] = {3,2,7,5,2};//数组初始化,容器
        // 创建了两个指针 pStart 和 pEnd,分别指向数组 arr 的起始位置和结束位置的下一个元素。
        int* pStart = arr;
        int* pEnd = &arr[sizeof(arr)/sizeof(int)];
        // &arr[sizeof(arr)/sizeof(int)]:意思是取数组 arr 中从起始位置开始偏移 sizeof(arr)/sizeof(int) 个 int 元素的地址
        // sizeof(arr):返回数组 arr 占用的总字节数。
        // sizeof(int):返回 int 类型的变量所占用的字节数。
        // sizeof(arr) / sizeof(int):计算出数组 arr 中能容纳的 int 类型元素的个数。这个表达式的结果就是数组 arr 的长度。
        // & 操作符用于取地址。因为数组名 arr 表示数组的首地址,所以 &arr[sizeof(arr)/sizeof(int)] 表示数组的起始地址加上偏移量所指向的地址。
    
        int n = mycount(pStart,pEnd,2);//统计2的个数
        cout << "n: "<<n<<endl;
    
        // system("pause");
        // 系统调用,它会执行一个命令来暂停程序的执行。
        // pause 命令会等待用户按下任意键后继续执行,因此这条语句会使程序暂停执行,直到用户按下任意键为止
        // return EXIT_SUCCESS;
        // EXIT_SUCCESS 是一个宏定义,表示程序成功执行并正常退出。在标准库 <cstdlib> 中定义了这个宏,它的值通常是 0。
        return 0;
    
    		//输出:2
    
    }
    
  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本版本与网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下: 目录 第一篇预备知识 第1 章C++ 编程技术...................................................... 3 1-1 C++与C 语言的区别................................................... 4 1-1-1 文件扩展名的改变,.............................................. 4 1-1-2 简化输入/输出手段.............................................. 5 1-1-3 数据类型声明的改变,............................................ 5 1-1-4 动态内存分配运算符的使用....................................... 6 1-1-5 弓I 用(References) 类型, ··················•················•"'''8 1-1-6 const 语义的扩展................................................ 9 1-1-7 指针声明类型与对象类型相一致.................................. 13 1-1-8 int 与char 不再等价............................................. 13 1-1-9 结构数据类型的变化............................................ 13 1-1-10 数组和指针技术的不同......................................... 14 1-2 C++存储技术........................................................ 15 1-2 一I C++存储类型.................................................. 15 I6I7 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. •. .• •. .• .. .. .. .. .. .. .. .. .. .. .. .. . 期 符存 饰生 修的 取象 存对 廿廿 I2I32 ~3 c c 1-3 C++ 函数技术........................................................ 19 1-3-1 类的构造函数、析构函数与赋值函数,..... - ........ - .............. 19 1-3-2 在派生类中实现类的基本函数,................... _ ............... 29 1-3-3 内联函数技术,........ ................................... 30 3133 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 现 实 术的 技制 数机 函象 元对 友向 由 曰1. l -C 1 4 3337 ..... .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 术术 技技 承载 继重 的数 类函 l4l44 3 ~ 3840 ..... .. .. .. .. .. .. •. .• .. .. .. .. .. .. .. .. .. .. .. •. .• .. •. .• •. •• .• .. .. .. .. .. .. .. .. .. •. •• .• . 术 技 类 术象 技抽 载和 重数 符函 算虚 运纯 l4l34 4 1-5 小结...............................................
第一篇 预备知识 第1章 C++编程技术 2 1.1 类和对象 2 1.2 类的继承 5 1.3 函数重载 5 1.4 访问控制 7 1.5 操作符重载 8 1.6 显式类型转换 9 1.7 异常处理 13 1.8 名字空间 17 1.9 友员函数 20 1.10 内联函数 21 1.11 静态成员 22 1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 3.2 标准输入输出 34 3.3 文件输入输出 36 3.4 流的格式控制 41 3.5 本章小结 45 第二篇 C++ STL泛化技术基础 第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 4.4.1 容器(Container) 52 4.4.2 迭代器(Iterator) 53 4.4.3 算法(Algorithm) 53 4.4.4 函数对象(Function Object) 54 4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本章小结 57 第5章 C++ STL泛化技术分析 58 5.1 算法和迭代器 58 5.1.1 算法 58 5.1.2 迭代器 61 5.1.3 函数对象 65 5.1.4 适配器 68 5.2 内存分配器和容器 74 5.2.1 内存分配器 75 5.2.2 容器 77 5.3 概念 82 5.3.1 基础性概念 82 5.3.2 容器概念 84 5.3.3 迭代器概念 86 5.3.4 函数对象概念 88 5.4 本章小结 89 第三篇 C++ STL容器技术 第6章 vector向量容器 92 6.1 vector技术原理 92 6.2 vector应用基础 94 6.3 本章小结 101 第7章 deque双端队列容器 102 7.1 deque技术原理 102 7.2 deque应用基础 108 7.3 本章小结 115 第8章 list双向链表容器 116 8.1 list技术原理 116 8.2 list应用基础 124 8.3 本章小结 131 第9章 slist单向链表容器 132 9.1 slist技术原理 132 9.2 slist应用基础 140 9.3 本章小结 148 第10章 bit_vector位向量容器 149 10.1 bit_vector技术原理 149 10.2 bit_vector应用基础 156 10.3 本章小结 161 第11章 set集合容器 162 11.1 set技术原理 162 11.2 set应用基础 181 11.3 本章小结 186 第12章 multiset多重集合容器 187 12.1 multiset技术原理 187 12.2 multiset应用基础 190 12.3 本章小结 196 第13章 map映照容器 197 13.1 map技术原理 197 13.2 map应用基础 200 13.3 本章小结 206 第14章 multimap多重映照容器 207 14.1 multimap技术原理 207 14.2 multimap应用基础 210 14.3 本章小结 216 第15章 hash_set哈希集合容器 217 15.1 hash_set技术原理 217 15.2 hash_set应用基础 230 15.3 本章小结 234 第16章 hash_map哈希映照容器 235 16.1 hash_map技术原理 235 16.2 hash_map应用基础 237 16.3 本章小结 242 第17章 string基本字符序列容器 243 17.1 string技术原理 243 17.2 string应用基础 258 17.3 本章小结 264 第18章 stack堆栈容器 265 18.1 stack技术原理 265 18.2 stack应用基础 266 18.3 本章小结 269 第19章 queue队列容器 270 19.1 queue技术原理 270 19.2 queue应用基础 271 19.3 本章小结 274 第20章 priority_queue优先队列容器 275 20.1 priority_queue技术原理 275 20.2 priority_queue应用基础 278 20.3 本章小结 281 第四篇 C++ STL算法技术 第21章 非变易算法 284 21.1 逐个容器元素for_each 284 21.2 查找容器元素find 285 21.3 条件查找容器元素find_if 286 21.4 邻近查找容器元素adjacent_find 287 21.5 范围查找容器元素find_first_of 289 21.6 统计等于某值的容器元素个数count 290 21.7 条件统计容器元素个数count_if 291 21.8 元素不匹配查找mismatch 293 21.9 元素相等判断equal 295 21.10 子序列搜索search 296 21.11 重复元素子序列搜索search_n 299 21.12 最后一个子序列搜索find_end 301 21.13 本章小结 303 第22章 变易算法 304 22.1 元素复制copy 304 22.2 反向复制copy_backward 305 22.3 元素交换swap 306 22.4 迭代器交换iter_swap 307 22.5 区间元素交换swap_ranges 308 22.6 元素变换transform 309 22.7 替换 310 22.8 条件替换replace_if 311 22.9 替换和复制replace_copy 312 22.10 条件替换和复制replace_copy_if 313 22.11 填充fill 314 22.12 n次填充fill_n 315 22.13 随机生成元素generate 316 22.14 随机生成n个元素generate_n 317 22.15 移除复制remove_copy 318 22.16 条件移除复制remove_copy_if 319 22.17 移除remove 320 22.18 条件移除remove_if 321 22.19 不连续重复元素复制unique_copy 322 22.20 剔除连续重复元素unique 324 22.21 元素反向reverse 325 22.22 反向复制reverse_copy 326 22.23 旋转rotate 327 22.24 旋转复制rotate_copy 329 22.25 随机抖动random_shuffle 330 22.26 随机采样random_sample 331 22.27 容器分割partition 333 22.28 容器稳定分割stable_partition 335 22.29 本章小结 338 第23章 排序算法 339 23.1 元素入堆push_heap 339 23.2 创建堆make_heap 343 23.3 元素出堆pop_heap 348 23.4 堆排序sort_heap 351 23.5 是否为堆is_heap 352 23.6 局部排序partial_sort 354 23.7 局部排序复制partial_sort_copy 356 23.8 排序sort 359 23.9 归并merge 366 23.10 内部归并inplace_merge 368 23.11 稳定排序stable_sort 376 23.12 是否排序is_sorted 383 23.13 第n个元素nth_element 384 23.14 下确界lower_bound 386 23.15 上确界upper_bound 388 23.16 等价区间equal_range 390 23.17 折半搜索binary_search 392 23.18 子集合includes 393 23.19 集合求并set_union 394 23.20 集合求交set_ intersection 396 23.21 集合求差set_difference 398 23.22 集合求异set_symmetric_difference 399 23.23 最小值min 401 23.24 最大值max 402 23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23.28 下一排列组合next_permutation 406 23.29 上一排列组合prev_permutation 409 23.30 本章小结 411 第24章 数值算法 412 24.1 递增赋值iota 412 24.2 元素求和accumulate 413 24.3 两序列元素内积inner_product 414 24.4 部分元素求和partial_sum 415 24.5 相邻元素求差adjacent_difference 417 24.6 n次方计算power 419 24.7 本章小结 421 第五篇 C++ STL迭代器技术 第25章 输入输出流迭代器 424 25.1 输入流迭代器 424 25.2 输出流迭代器 426 25.3 本章小结 427 第26章 插入/反向/存储迭代器 428 26.1 向前插入迭代器 428 26.2 向后插入迭代器 429 26.3 插入迭代器 431 26.4 反向迭代器 432 26.5 反向双向迭代器 434 26.6 原始存储迭代器 435 26.7 本章小结 437 附录 STL版权说明 438
第一篇 预备知识 第1章 C++编程技术 2 1.1 类和对象 2 1.2 类的继承 5 1.3 函数重载 5 1.4 访问控制 7 1.5 操作符重载 8 1.6 显式类型转换 9 1.7 异常处理 13 1.8 名字空间 17 1.9 友员函数 20 1.10 内联函数 21 1.11 静态成员 22 1.12 本章小结 23 第2章 C++模板技术 25 2.1 函数模板 25 2.2 类模板 27 2.3 模板完全特化 28 2.4 函数模板重载 30 2.5 类模板继承 30 2.6 本章小结 31 第3章 C++ I/O流技术 32 3.1 I/O流类 32 3.2 标准输入输出 34 3.3 文件输入输出 36 3.4 流的格式控制 41 3.5 本章小结 45 第二篇 C++ STL泛化技术基础 第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3 C++ STL的Visual C++编译 50 4.4 C++ STL的体系结构 52 4.4.1 容器(Container) 52 4.4.2 迭代器(Iterator) 53 4.4.3 算法(Algorithm) 53 4.4.4 函数对象(Function Object) 54 4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本章小结 57 第5章 C++ STL泛化技术分析 58 5.1 算法和迭代器 58 5.1.1 算法 58 5.1.2 迭代器 61 5.1.3 函数对象 65 5.1.4 适配器 68 5.2 内存分配器和容器 74 5.2.1 内存分配器 75 5.2.2 容器 77 5.3 概念 82 5.3.1 基础性概念 82 5.3.2 容器概念 84 5.3.3 迭代器概念 86 5.3.4 函数对象概念 88 5.4 本章小结 89 第三篇 C++ STL容器技术 第6章 vector向量容器 92 6.1 vector技术原理 92 6.2 vector应用基础 94 6.3 本章小结 101 第7章 deque双端队列容器 102 7.1 deque技术原理 102 7.2 deque应用基础 108 7.3 本章小结 115 第8章 list双向链表容器 116 8.1 list技术原理 116 8.2 list应用基础 124 8.3 本章小结 131 第9章 slist单向链表容器 132 9.1 slist技术原理 132 9.2 slist应用基础 140 9.3 本章小结 148 第10章 bit_vector位向量容器 149 10.1 bit_vector技术原理 149 10.2 bit_vector应用基础 156 10.3 本章小结 161 第11章 set集合容器 162 11.1 set技术原理 162 11.2 set应用基础 181 11.3 本章小结 186 第12章 multiset多重集合容器 187 12.1 multiset技术原理 187 12.2 multiset应用基础 190 12.3 本章小结 196 第13章 map映照容器 197 13.1 map技术原理 197 13.2 map应用基础 200 13.3 本章小结 206 第14章 multimap多重映照容器 207 14.1 multimap技术原理 207 14.2 multimap应用基础 210 14.3 本章小结 216 第15章 hash_set哈希集合容器 217 15.1 hash_set技术原理 217 15.2 hash_set应用基础 230 15.3 本章小结 234 第16章 hash_map哈希映照容器 235 16.1 hash_map技术原理 235 16.2 hash_map应用基础 237 16.3 本章小结 242 第17章 string基本字符序列容器 243 17.1 string技术原理 243 17.2 string应用基础 258 17.3 本章小结 264 第18章 stack堆栈容器 265 18.1 stack技术原理 265 18.2 stack应用基础 266 18.3 本章小结 269 第19章 queue队列容器 270 19.1 queue技术原理 270 19.2 queue应用基础 271 19.3 本章小结 274 第20章 priority_queue优先队列容器 275 20.1 priority_queue技术原理 275 20.2 priority_queue应用基础 278 20.3 本章小结 281 第四篇 C++ STL算法技术 第21章 非变易算法 284 21.1 逐个容器元素for_each 284 21.2 查找容器元素find 285 21.3 条件查找容器元素find_if 286 21.4 邻近查找容器元素adjacent_find 287 21.5 范围查找容器元素find_first_of 289 21.6 统计等于某值的容器元素个数count 290 21.7 条件统计容器元素个数count_if 291 21.8 元素不匹配查找mismatch 293 21.9 元素相等判断equal 295 21.10 子序列搜索search 296 21.11 重复元素子序列搜索search_n 299 21.12 最后一个子序列搜索find_end 301 21.13 本章小结 303 第22章 变易算法 304 22.1 元素复制copy 304 22.2 反向复制copy_backward 305 22.3 元素交换swap 306 22.4 迭代器交换iter_swap 307 22.5 区间元素交换swap_ranges 308 22.6 元素变换transform 309 22.7 替换 310 22.8 条件替换replace_if 311 22.9 替换和复制replace_copy 312 22.10 条件替换和复制replace_copy_if 313 22.11 填充fill 314 22.12 n次填充fill_n 315 22.13 随机生成元素generate 316 22.14 随机生成n个元素generate_n 317 22.15 移除复制remove_copy 318 22.16 条件移除复制remove_copy_if 319 22.17 移除remove 320 22.18 条件移除remove_if 321 22.19 不连续重复元素复制unique_copy 322 22.20 剔除连续重复元素unique 324 22.21 元素反向reverse 325 22.22 反向复制reverse_copy 326 22.23 旋转rotate 327 22.24 旋转复制rotate_copy 329 22.25 随机抖动random_shuffle 330 22.26 随机采样random_sample 331 22.27 容器分割partition 333 22.28 容器稳定分割stable_partition 335 22.29 本章小结 338 第23章 排序算法 339 23.1 元素入堆push_heap 339 23.2 创建堆make_heap 343 23.3 元素出堆pop_heap 348 23.4 堆排序sort_heap 351 23.5 是否为堆is_heap 352 23.6 局部排序partial_sort 354 23.7 局部排序复制partial_sort_copy 356 23.8 排序sort 359 23.9 归并merge 366 23.10 内部归并inplace_merge 368 23.11 稳定排序stable_sort 376 23.12 是否排序is_sorted 383 23.13 第n个元素nth_element 384 23.14 下确界lower_bound 386 23.15 上确界upper_bound 388 23.16 等价区间equal_range 390 23.17 折半搜索binary_search 392 23.18 子集合includes 393 23.19 集合求并set_union 394 23.20 集合求交set_ intersection 396 23.21 集合求差set_difference 398 23.22 集合求异set_symmetric_difference 399 23.23 最小值min 401 23.24 最大值max 402 23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23.28 下一排列组合next_permutation 406 23.29 上一排列组合prev_permutation 409 23.30 本章小结 411 第24章 数值算法 412 24.1 递增赋值iota 412 24.2 元素求和accumulate 413 24.3 两序列元素内积inner_product 414 24.4 部分元素求和partial_sum 415 24.5 相邻元素求差adjacent_difference 417 24.6 n次方计算power 419 24.7 本章小结 421 第五篇 C++ STL迭代器技术 第25章 输入输出流迭代器 424 25.1 输入流迭代器 424 25.2 输出流迭代器 426 25.3 本章小结 427 第26章 插入/反向/存储迭代器 428 26.1 向前插入迭代器 428 26.2 向后插入迭代器 429 26.3 插入迭代器 431 26.4 反向迭代器 432 26.5 反向双向迭代器 434 26.6 原始存储迭代器 435 26.7 本章小结 437 附录 STL版权说明 438

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值