开始学习侯捷老师的课程了~~

一:六大组件关系

  1. 容器(Container
  2. 算法(Algorithm
  3. 迭代器(Iterator
  4. 仿函数(Function object
  5. 适配器(Adaptor
  6. 空间配制器(allocator

二:组件调用

  1. #include <vector>
  2. #include <algorithm>
  3. #include <functional>
  4. #include <iostream>
  5. #include <cstdlib>
  6.  
  7. using namespace std;
  8.  
  9. //https://www.cnblogs.com/freeopen/p/5482962.html
  10.  
  11. int main01()
  12. {
  13. int ia[] = { , , , , , };
  14.  
  15. //1.容器 2.分配器
  16. //分配器可以不写,会有默认,但是两者要一致。<>是模板函数
  17. //前闭后开区间??[)
  18. vector<int, allocator<int>> vi(ia, ia + ); //设置初值
  19.  
  20. //3.算法 4.迭代器 5.仿函数 6.适配器
  21. //找到大于等于40数
  22. cout << count_if(vi.begin(), vi.end(), //count是计算数量
  23. not1(bind2nd(less <int>(), )))<<endl; //_if是指含有条件,
  24. //less <int>()函数小于
  25. //bind2nd绑定第二个参数40.小于40
  26. //not1否,不小于40
  27. //后面跟上小于40的条件
  28.  
  29. //遍历
  30. vector<int>::iterator iter = vi.begin();
  31. for (; iter != vi.end();++iter)
  32. {
  33. cout << *iter << " ";
  34. }
  35.  
  36. //C11
  37. /*
  38. for(decl:col1){
  39. ....
  40. }
  41. */
  42. cout << endl;
  43. for (int i : {,,,,,,,})
  44. {
  45. cout << i << " ";
  46. }
  47.  
  48. //引用操作
  49. cout << endl;
  50. for (auto& elem : vi) //auto让编译器自己辨别(不太好)等号从右向左,先知道返回类型,再确定auto int
  51. {
  52. elem *= ;
  53. }
  54.  
  55. cout << endl;
  56. for (auto elem : vi)
  57. {
  58. cout << elem << " ";
  59. }
  60.  
  61. system("pause");
  62. return ;
  63. }

补充1:前闭后开区间

默认是 .begin()找到第一个元素,泛型指针指向他 .end()找到的不是最后一个元素,而是最后一个元素的下一个元素。不允许*(c.end())会溢出

三:使用STL的好处

(一)STL是C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。

(二)STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但是这种分离确实使得STL变得非常通用。

  1. STLvector容器中,可以放入元素、基础数据类型变量、元素的地址;  //数据结构
  2.  
  3. STLsort()函数可以用来操作vector,list等容器。          //算法

(三)程序员可以不用思考STL具体的实现过程,只要能够熟使用STL就OK了。这样他们就可以把精力放在程序开发的别的方面。

(四)STL具有高可重用性,高性能,高移植性,跨平台的优点。

  1. 高可重用性:STL中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。关于模板的知识,已经给大家介绍了。
  2.  
  3. 高性能:如map可以高效地从十万条记录里面查找出指定的记录,因为map是采用红黑树的变体实现的。(红黑树是平横二叉树的一种)
  4.  
  5. 高移植性:如在项目A上用STL编写的模块,可以直接移植到项目B上。
  6.  
  7. 跨平台:如用windowsVisual Studio编写的代码可以在Mac OSXCode上直接编译。

四:容器---用来管理一组元素

或者

(一)容器分类---序列式和关联式

1.序列式容器:vector、deque、list

  1. 每个元素都有固定位置--取决于插入时机和地点,和元素值无关。

2.关联式容器:set、multiset、map、multimap

  1. 元素位置取决于特定的排序准则,和插入顺序无关

(二)容器描述

五:迭代器

  1. 几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
  1. 迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。
  2. <utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,
  3. <iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,
    <memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

六:算法

  1. STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。
  1. 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。
  2. <algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。
  3. <numeric>体积很小,只包括几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
  4. <functional>中则定义了一些模板类,用以声明函数对象。

01--STL泛型编程了解的更多相关文章

  1. C++ STL泛型编程——在ACM中的运用

    学习过C++的朋友们应该对STL和泛型编程这两个名词不会陌生.两者之间的关系不言而喻,泛型编程的思想促使了STL的诞生,而STL则很好地体现了泛型编程这种思想.这次想简单说一下STL在ACM中的一些应 ...

  2. C++ -- STL泛型编程(一)之vector

    STL提供三种组件:容器,迭代器,算法,它们都支持泛型程序设计标准容器有两类:顺序容器和关联容器. 顺序容器(vector,list,deque,string等)是一系列元素的有序组合. 关联容器(s ...

  3. C++ -- STL泛型编程(二)之set

    set集合容器实现了红黑树的平衡二叉检索树的数据结构,在插入元素时候它会自动调整二叉树的排列,把元素放在适当的位置,以确保每个子树根节点的键值都大于左子树的所有节点的键值,而小于右子树的所有节点的键值 ...

  4. STL——泛型编程

    1.指针的算术运算 对于一个存储int数据的vector,我们要查找某值是否存在于其中,采用下标操作的做法如下: int* find(const vector<int> &vec, ...

  5. [GeekBand] STL与泛型编程(1)

    在C++语法的学习过程中,我们已经对模板有了基本的了解.泛型编程就是以模板为工具的.泛化的编程思想.本篇文章介绍了一些在之前的文章中没有涉及到的一些模板知识.泛型编程知识和几种容器.关于模板的一些重复 ...

  6. 泛型编程、STL的概念、STL模板思想及其六大组件的关系,以及泛型编程(GP)、STL、面向对象编程(OOP)、C++之间的关系

    2013-08-11 10:46:39 介绍STL模板的书,有两本比较经典: 一本是<Generic Programming and the STL>,中文翻译为<泛型编程与STL& ...

  7. STL之父Stepanov谈泛型编程的发展史

    这是一篇Dr. Dobb's Journal对STL之父stepanov的采访.文中数次提到STL的基本思想.语言的特性.编程的一些根本问题等,非常精彩.这篇文章让我想去拜读下stepanov的大作& ...

  8. [GeekBand] STL与泛型编程(2)

    本篇文章在上一篇文章的基础上进一步介绍一些常用的容器以及STL的一些深入知识. 一. Stack和Queue 栈和队列是非常常用的两种数据结构,由deque适配而来.关于数据结构的知识这里就不在介绍了 ...

  9. 自己动手实现STL 01:内存配置器的实现(stl_alloc.h)

    一.前言 在STL中,容器是其中的重中之重,基本的STL中的算法,仿函数等都是围绕着容器实现的功能.而,内存配置器,是容器的实现的基础.所以,我第一次要去编写便是内存配置器的实现.在STL中,内存配置 ...

  10. [GeekBand] STL与泛型编程(3)

    本篇文章主要介绍泛型算法中的变易.排序.数值算法. 一. 变易算法 所谓变易算法是指那些改变容器中的对象的操作. 1.1 copy组 template <class InputIterator, ...

随机推荐

  1. SQLSERVER 维护计划无法删除

    数据对网站运营或者企业运营是至关重要的,所以,我们在使用数据库的时候,为了保证数据的安全可靠性,都会做数据库备份,很显然,这个备份,我们不可能每天都去手动备份,SQLServer 数据库就可以提供数据 ...

  2. 听大佬学长RQY报告有感

    听了RQY大佬的报告,我深有感触…… 数学基础很重要.首先我们要学好数学,众所周知信息学奥赛的实质是做数学题.如果你的编程能力再高,绞尽脑汁就是不会解数学题那有什么用呢?如果你会解数学题,那么你可以根 ...

  3. Django+Xadmin打造在线教育系统(三)

    完成登录 注册 找回密码 激活 验证码集成 将HTML文件拷贝到templates目录下,css,js,img,media,images文件夹拷贝到static文件夹下 修改index.html和lo ...

  4. 【XSY1529】小Q与进位制 分治 FFT

    题目大意 ​ 小Q发明了一种进位制,每一位的变化范围是\(0\)~\(b_i-1\),给你一个这种进位制下的整数\(a\),问你有多少非负整数小于\(a\).结果以十进制表示. ​ \(n\leq 1 ...

  5. Shell 流程控制-if 语句

    单分支if条件语句 if [ 条件判断式 ] ; then程序fi 例子:判断分区使用率 #!/bin/bash # Author: huangrui (Email:mycheryhr@gmail.c ...

  6. Leetcode 350.两个数组的交集|| By Python

    给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5 ...

  7. Python的快排应有的样子

    快排算法 ​ 简单来说就是定一个位置然后,然后把比它小的数放左边,比他大的数放右边,这显然是一个递归的定义,根据这个思路很容易可以写出快排的代码 ​ 快排是我学ACM路上第一个让我记住的代码,印象很深 ...

  8. Codeforces Round #516 (Div. 2)D. Labyrinth(BFS)

    题目链接:http://codeforces.com/contest/1064/problem/D 题目大意:给你一个n*m的图,图中包含两种符号,'.'表示可以行走,'*'表示障碍物不能行走,规定最 ...

  9. 快速傅里叶变换(FFT)

    扯 去北京学习的时候才系统的学习了一下卷积,当时整理了这个笔记的大部分.后来就一直放着忘了写完.直到今天都腊月二十八了,才想起来还有个FFT的笔记没整完呢.整理完这个我就假装今年的任务全都over了吧 ...

  10. long long

    1. ll a; scanf("%d",&a); 数据读入后,产生错误 2. const ll inf=1e18; 3. int * ll = ll ll * int = ...