STL简介(standard Template Library)
STL的基本组件:容器(container),迭代器(iterator),函数对象(function object)
算法(algorithms)
 
Iterators是算法和容器的桥梁
将迭代器作为算法的参数,通过迭代器来访问容器而不是把容器直接作为算法的参数;
 
将函数对象作为算法的参数而不是将函数所执行的运算作为算法的一部分;
使用STL中提供的或者自定义的迭代器和函数对象,配合STL算法,可以组合出各种各样的功能;
 
容器
  概念:容纳、包含一组元素的对象
  基本容器类模板:
    顺序容器:array(数组),vector(向量),deque(双端队列),forward_list(单链表),list(列表)
    (有序)关联容器:set(集合),multiset(多重集合),map(映射),multiple(多重映射)
  无序关联容器:
    unordered_set, unordered_multiset,unodered_map,unordered_multimap
 
容器适配器
  stack(栈)
  queue(队列)
  priority_queue(优先队列)
注意:添加相应的头文件
 
STL的基本组件---迭代器(iterator)
  1. 提供了一种顺序访问容器中每个元素的方法
  2. 可以使用++运算符来获得指向下一个元素的迭代器
  3. 可以使用*运算符访问迭代器所指向的元素,如果元素类型是类或者结构体,可以使用->运算符直接访问该元素的一个成员;
  4. 有些迭代器还支持--运算符获得指向上一个元素的迭代器
  5. 迭代器是泛化的指针,指针也具有同样的特性,因此指针本身就是一种迭代器
  6. 使用独立于STL的迭代器,需要包含头文件<iterator>

STL的基本组件---函数对象(function object)

  1. 一个行为类似函数的对象,对它可像调用函数一样调用
  2. 函数对象是泛化的函数:任何普通的函数和任何重载了“()”运算符的类的对象都可以作为函数对象使用
  3. 使用STL的函数对象,需要包含头文件<functional>

STL的基本组件---算法(algorithm)

  1. 可以广泛用于不同对象和内置的数据类型
  2. STL包括70多个算法(排序,消除算法,计数算法,比较算法,变换算法,置换算法,容器管理等)
  3. 使用STL的算法,需要包含头文件<algorithm>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <functional> using namespace std; int main()
{
const int N = ;
vector<int> s(N);//容器
for (int i = ; i < N; i++)
{
cin >> s[i];
} /*
算法:取相反数后输出;ostream_iterator<int>(cout, " "):输出流迭代器
negate<int>() 取相反数的函数;
transform算法的一种实现:
transform算法顺序遍历first和last两个迭代器所指向的元素;
将每个元素的值作为函数对象op的参数;
将op的返回值通过迭代器result顺序输出;
遍历完成后result迭代器指向的是输出的最后一个元素的下一个位置,transform会将该迭代器返回;
template <class InputIterator, class OutputIterator, class UnaryFunction>
OutputIterator transform(InputIterator first, InputIterator last, OutputItertor result,UnaryFunction op)
{
for(;first!=last;++first,++result)
*result = op(*first);
return result;
}
*/
transform(s.begin(), s.end(), ostream_iterator<int>(cout, " "), negate<int>());
cout << endl;
return ;
}

C++学习笔记43:STL的更多相关文章

  1. CUBRID学习笔记 43 insert into

    cubrid的中sql查询语法insert into ------ 官方文档是英文的,看不明白可以参看ocracle的同类函数说明.很多都是一样的. INSERT INTO a_tbl1(id) VA ...

  2. [原创]java WEB学习笔记43:jstl 介绍,core库详解:表达式操作,流程控制,迭代操作,url操作

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. 学习笔记:STL

    第一部分:(参考百度百科) 一.STL简介 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Me ...

  4. Linux下汇编语言学习笔记43 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  5. Java学习笔记43(Spring的jdbc模板)

    在之前的学习中,我们执行sql语句,需要频繁的开流,关流比较麻烦,为了更加的简化代码,我们使用Spring 的jdbc模板jdbcTemplate来简化我们的代码量:需要导入的包有: 我们在之前的dr ...

  6. C++ 学习笔记之 STL 队列

    一.  引言 在算法以及数据结构的实现中,很多地方我们都需要队列(遵循FIFO,先进先出原则). 为了使用队列,我们可以自己用数组来实现队列,但自己写太麻烦不说,并且还很容易出错. 好在C++的STL ...

  7. android学习笔记43——图形图像处理3——Path

    Path类 Path类可以预先在View上将N个点连成一条“路径”,然后调用Canavas的drawPath(path,paint)即可沿着路径绘制图形. android还为路径绘制提供了PathEf ...

  8. 学习笔记-C++ STL iterator与对指针的理解-20170618

    vector的itrerator支持random access #include<iostream> #include<vector> using namespace std; ...

  9. Kali学习笔记43:SQL盲注

    前面的文章都是基于目标会返回错误信息的情况进行判断是否存在SQL注入 我们可以轻易根据数据库报错信息来猜测SQL语句和注入方式 如果程序员做得比较好,不显示错误信息,这种情况下得SQL注入称为SQL盲 ...

随机推荐

  1. centos 命令和

    一.远程工具 Window系统上 Linux 远程登录客户端有SecureCRT, Putty, SSH Secure Shell.TightVNC... 重点推荐一款 FinallShell,一般人 ...

  2. cactiez v11添加对mysql数据库、apache系统进行监控

    cactiez默认已经安装了mysql监控的模板,需要我们对服务器端和被监控的mysql客户端进行配置才能生效. 被监控的Mysql客户端: 如cactiez的IP为192.168.0.8 #添加一个 ...

  3. Ex 6_21 最小点覆盖问题_第八次作业

    子问题定义: 对于图中的每个结点,有两种状态,即属于最小点覆盖和不属于最小点覆盖,定义minSet[i][0]表示结点i属于点覆盖,并且以i为根的树的最小点覆盖的大小.minSet[i][1]表示点i ...

  4. 一张纸,折多少次和珠穆拉峰一样高(for if 和break)

  5. 测试开发之Django——No8.Django中的视图与URL配置

    在Django中,页面内容是靠views function(视图函数)来产生,URL定义在URLconf中. 这是一个纯净项目的url配置文件,他存在的目录,是与setting文件在同一个目录中. u ...

  6. python下图像读取方式以及效率对比

    https://zhuanlan.zhihu.com/p/30383580 opencv速度最快,值得注意的是mxnet的采用多线程读取的方式,可大大加速

  7. 采用busybox 代替android 自带的shell

    折腾了几天,被Android那点儿少得可怜的shell命令折磨的死去活来,终于下定了革命的决心.看一下怎么把渺小的toolbox替换成伟大的busybox吧.先大致描述一下Android系统中的she ...

  8. LeetCode(51):N皇后

    Hard! 题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问 ...

  9. python 全栈开发,Day128(创建二维码,扫码,创建玩具的基本属性)

    昨日内容回顾 1.app播放音乐 plus.audio.createPlayer(文件路径/URL) player.play() 播放音乐 player.pause() 暂停播放 player.res ...

  10. VS-常用的快捷键-总结

    1: 快速添加引用 === Shift+Alt+F10; 也可用于实现抽象类 2: 直接添加属性 ===prop+Tab+Tab; 3: 根据字段添加属性 === Ctrl +r+e; 4: 格式化代 ...