STL1:简介

2023-05-16

STL1:简介

  • 1、背景
    • 1.1 STL是什么?
    • 1.2 STL与C++标准库的关系
    • 1.3 版本
  • 2、STL的组成
  • 3、容器分类
  • 4、迭代器分类
    • 4.1 分类原则:访问方式
    • 4.2 分类原则:操作类型
    • 4.3 测试
  • 5、适配器分类
  • 6、算法分类
  • 7、函数对象分类
  • 8、分配器

1、背景

1.1 STL是什么?

STL(Standard Template Library)标准模板库的英文缩写,包含有计算机科学领域常用的基本数据结构和基本算法。

1.2 STL与C++标准库的关系

在这里插入图片描述

1.3 版本

在这里插入图片描述

2、STL的组成

在这里插入图片描述

No.Component部件作用
1Container容器存储数据
2lterator迭代器遍历容器数据
3Adaper适配器(配接器)容器转换
4Algorithm算法通用算法
5Function Object/Functor函数对象/仿函数
6Allocator分配器(配置器)分配释放内存

程序 = 数据结构(容器) + 算法
迭代器是容器与算法的桥梁

3、容器分类

分类原则:结构

No.Container容器e.g.
1Sequence Container顺序容器(序列容器)vector,list,deque
2Associative Container关联容器map,``multimap,set,multiset`
3Container Adapter容器适配器stack,queue,priority_queue

4、迭代器分类

4.1 分类原则:访问方式

No.lterator迭代器能力e.g.
1Input Iterator输入迭代器向前读取能力istream_iterator
2Output Iterator输出迭代器向前写入能力ostream_iterator
3Forward Iterator向前迭代器向前读取写入能力-
4Biredirectional Iterator双向迭代器双向读取写入能力list,map,set的iterator
5Random-Access Iterator随机访问迭代器随机读取写入能力string,vector,deque的iterator

4.2 分类原则:操作类型

No.lterator迭代器e.g.
1iostream Iteractoriostream迭代器istream_iteractor,ostream_iteractor
2Insert Iteractor插入迭代器back_inserter,front_inserter,inserter
3Reverse Iteractor反向迭代器reverse_iteractor

4.3 测试

#include <iostream>
#include <vector>

using namespace std;

int main(){
    vector<int> vec;
    int n;
    while(cin>>n){
        vec.push_back(n);
    }

    for(int i=0;i<vec.size();i++){
        cout << vec[i] << endl;
    }
    //指针遍历数组
    int arr[] = {1,2,3,4,5,6};
    int *p = arr;
    while(p!=arr+6){
        cout << *p << " ";
	++p;
    }
    cout << endl;
    
    //迭代器遍历数组
    int *q = begin(arr);
    while(q!=end(arr)){
        cout << *q << " ";
	++q;
    }
    cout << endl;


    //迭代器
    vector<int>::iterator it=vec.begin();
    while(it != vec.end()){
        cout << *it << " ";
	++it;
    }
    cout << endl;

    //const 迭代器
    const vector<int> cvec = vec;
    vector<int>::const_iterator cit = cvec.cbegin();
    while(cit!=cvec.cend()){
        cout << *cit << " ";
	++cit;
    }
    cout << endl;

    //C++11  begin() end()
    vector<int>::iterator it2 = begin(vec);
    while(it2 != end(vec)){
        cout << *it2 << " ";
	++it2;
    }
    cout << endl;

    //C++11  base--scope--for
    for(int n:arr){
        cout << n << " ";
    }
    cout << endl;

    for(int n:vec){
        cout << n << " ";
    }
    cout << endl;
}

5、适配器分类

分类原则:适配部件

No.Adapter适配器e.g.
1Container Adapter容器适配器stack,queue,priority_queue
2Iterator Adapter迭代适配器back_inserter,front_inserter,inserter
3Function-Object Adapter函数对象适配器bind1st,bind2nd,not1,not2

6、算法分类

分类原则:按操作类型

No.Algorithm算法e.g.
1Read Only只读算法find,count,search,for_each,mismatch,equal,binary_search
2Write Only只写算法fill,generate,copy,transform,merge,swap,replace
3Sort排序算法sort,stable_sort,reverse

7、函数对象分类

分类原则:运算类型

No.Algorithm算法e.g.
1Arithmetic Function-Object算术函数对象plus,minus,multiplies,divides,modulus,negate
2Relational Function-Object关系函数对象equal_to,not_equal_to,less,less_equal,greater,greater_equal
3Logical Function-Object逻辑函数对象logical_and,logical_or,logical_not

8、分配器

功能:获取释放内存

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL1:简介 的相关文章

随机推荐

  • 激光SLAM建图过程中的问题MessageFilter [target=odom_combined ]:Dropped 100.00% of messages so far.,解决方案

    最近在和师弟用kobuki底盘进行SLAM建图的过程中遇到一个比较棘手的问题 xff0c 一直没有解决 xff0c 直到今天我在仿真环境中也碰到了 WARN 1618301922 711685031 2351 764000000 Messa
  • Linux 内核优化-调大TCP最大连接数

    一 tcp 概述 1 服务器如何标识tcp连接 xff1f 在tcp应用中 xff0c server事先在某个固定端口监听 xff0c client主动发起连接 xff0c 经过三路握手后建立tcp连接 在确定最大连接数之前 xff0c 先
  • 飞书妙记用法小结

    企业升级后 xff0c 可以到达10G 妙记的2G不是指代识别容量 xff0c 而是指代源文件容量 额度满了以后 选择权益数据 那么如果容量满了的话 xff0c 怎么释放呢 xff1f 需要删除回收站里面的所有文件 xff0c 才可以释放
  • 3-1利用文件流复制文件内容-Java

    题目 xff1a 编程利用文件流把一个文本文件中的内容复制到另外一个文件中 解答 xff1a Test类 xff1a package Experiment 3 Question 1 import java io public class T
  • C++强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)

    将类型名作为强制类型转换运算符的做法是C语言的老式做法 xff0c C 43 43 为保持兼容而予以保留 C 43 43 引入了四种功能不同的强制类型转换运算符以进行强制类型转换 xff1a static cast reinterpret
  • 字符数组的初始化与赋值

    代码编译运行环境 xff1a VS2017 43 Win32 43 Debug 1 字符数组的初始化方式 C语言中表示字符串有两种方式 xff0c 数组和指针 xff0c 字符数组是我们经常使用的方式 变量的定义包括指明变量所属类型 变量名
  • XML和HTML之间的差异

    XML 不是 HTML 的替代 XML 和 HTML 为不同的目的而设计 xff1a XML 被设计用来传输和存储数据 xff0c 其焦点是数据的内容 HTML 被设计用来显示数据 xff0c 其焦点是数据的外观 HTML 旨在显示信息 x
  • 线程、线程句柄、线程ID

    什么是句柄 xff1a 句柄是一种指向指针的指针 我们知道 xff0c 所谓指针是一种内存地址 应用程序启动后 xff0c 组成这个程序的各对象是住留在内存的 如果简单地理解 xff0c 似乎我们只要获知这个内存的首地址 xff0c 那么就
  • Modbus通信协议

    一 Modbus 协议简介 Modbus 协议是应用于电子控制器上的一种通用语言 通过此协议 xff0c 控制器相互之间 控制器经由网络 xff08 例如以太网 xff09 和其它设备之间可以通信 它已经成为一通用工业标准 有了它 xff0
  • 77组合

    给定两个整数 n 和 k xff0c 返回 1 n 中所有可能的 k 个数的组合 示例 输入 n 61 4 k 61 2 输出 2 4 3 4 2 3 1 2 1 3 1 4 最容易想到的应该是回溯 xff0c 更多题目思路及代码见 xff
  • 结构体内数据元素对齐

    默认情况下 xff0c 为方便结构体内元素的访问于管理 xff0c 当结构体内的数据元素的长度小于处理器的位数的时候 xff0c 便以结构体内的最长数据元素为对齐单位 xff0c 即结构体的长度一定为最长数据元素的长度的整数倍 如果结构体内
  • 关于stm32中串口重定向问题详解(找个时间好好理解下)

    usart这部分代码我也是从网上copy出来的 xff0c 一下是作者的解释 xff1a 简单地说 xff1a 想在mdk 中用printf xff0c 需要同时重定义fputc函数和避免使用semihosting 半主机模式 xff09
  • 缓冲区溢出(buffer overflow)避免方法

    什么是缓冲区溢出 xff1f copy数据进buffer时 xff0c 数据长度超过buffer中的剩余空间 缓冲区溢出的危害 xff1f 缓冲区溢出 xff0c 结果随机 xff0c 可能会导致程序功能不正常 xff0c 也可能导致程序崩
  • 【嵌入式系统应用开发】ROS环境安装配置与入门实操

    目录 前言1 ROS简介2 ROS软件安装2 1 添加ROS软件源2 2 添加密钥2 3 安装ROS2 4 初始化rosdep2 5 设置环境变量2 6 安装rosinstall 3 ROS初试 小海龟3 1 启动ROS Master3 2
  • 头文件包含的合理顺序

    如果包含顺序不当 xff0c 可能出现包含顺序依赖问题 xff0c 甚至引起编译错误 推荐如下顺序 xff1a 在头文件中 xff1a xff08 1 xff09 包含当前工程中所需要的自定义头文件 xff08 顺序自定 xff09 xff
  • windows下使用 SITL 模拟飞行——APM

    1 环境配置 按照官网教程配置环境 xff0c 链接 xff1a https ardupilot org dev docs building setup windows cygwin html building setup windows
  • Nvidia Xavier Nx平台修改CAN时钟调试记录

    1 前言 JETSON NX开发板上配置CAN bus与一个CAN收发器SN65HVD230 要求是改变设备树中的CAN时钟速率 让CAN时钟修改为40MHZ 2 如何设置准确的40MHz 要实现40MHz 首先需要设置CAN父时钟为pll
  • 【CMake】常见目录——10.1安装项目

    CMake中的目录 常见目录所代表的含义 PROJECT SOURCE DIR xff1a 工程的根目录 PROJECT BINARY DIR xff1a 运行cmake命令的目录 xff0c 通常为 PROJECT SOURCE DIR
  • 编译的时候所使用的动态库中出现错误:未定义的引用

    1 使用makefile编译的时候 xff0c 出现错误如下 xff1a 如上图所示 xff0c 是在动态库libicdbapi so中出现了未定义错误 xff0c 既然是未定义错误 xff0c 说明sqlprct sqlnult这5个符号
  • STL1:简介

    STL1 简介 1 背景1 1 STL是什么 xff1f 1 2 STL与C 43 43 标准库的关系1 3 版本 2 STL的组成3 容器分类4 迭代器分类4 1 分类原则 xff1a 访问方式4 2 分类原则 xff1a 操作类型4 3