文章目录

  • STL技术——STL概述和入门
    • 1、STL简介
    • 2、入门案例
      • 2.1、vecto存放内置数据类型
      • 2.2、vecto存放自定义数据类型
      • 2.3、容器嵌套

STL技术——STL概述和入门

1、STL简介

STL介绍

STL( standard template library),译为标准模板库或者泛型库,是 C++ 提供的一个基础模板的集合。

STL 已完全被内置到支持 C++ 的编译器中,不用另外安装。

STL广义上可以分为:容器container(本质上就是封装有数据结构的模板类)、算法algorithm、迭代器iterator;容器和算法之间通过迭代器无缝连接。

STL 就位于各个 C++ 的头文件中,即它并非以二进制代码的形式提供,而是以源代码的形式提供,并且STL几乎所有代码都采用了模板类或模板函数。

STL版本

因为STL是开源的,所以各个 C++ 编译器厂商在此标准的基础上都实现了满足自己需求的 C++ STL 泛型库,主要包括 HP STL、SGI STL、STLport、PJ STL、Rouge Wave STL 等。

STL六大组件

STL大体分为6大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

  • 容器:各种数据结构,如vector(常用)、list、deque、set、map等,用来存放数据

  • 算法:各种常见的算法,如sort、find、copy、for_each等

  • 迭代器:扮演了容器和算法之间的粘合剂

  • 仿函数:行为类似于函数,可做算法的某种策略

  • 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西

  • 空间配置器:负责空间的配置和管理

容器种类和功能

序列式容器:主要包括 vector 向量容器、list 列表容器以及 deque 双端队列容器。由于元素在容器中的位置与元素的值没有关系,也就是说,容器没有被排列好,因此被称作序列式容器。当我们将一个元素插入到一个容器中时,要指定该元素所在的位置。

排序式容器:包括 set 集合容器、multiset多重集合容器、map映射容器以及 multimap 多重映射容器。在排序容器中,元素的预设顺序是从小到大,即使是在插入一个元素时,它们也会被插入到合适的地方。因此,当查询时,性能方面关联容器表现得很好。

哈希式容器:C++11 新加入 4 种关联式容器,分别是 unordered_set 哈希集合、unordered_multiset 哈希多重集合、unordered_map 哈希映射和 unordered_multimap 哈希多重映射。哈希式容器和排序容器不同的地方在于:哈希容器中的元素是未排序的,元素的位置由哈希函数确定。

2、入门案例

2.1、vecto存放内置数据类型

#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;//回调函数
void myPrint(int val)
{cout << val << endl;
}void test1()
{//创建int类型的容器vector<int> v;//添加元素v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);//遍历容器方式一://起始迭代器,指向容器第一个元素//vector<int>::iterator itBegin = v.begin();//结束迭代器,指向容器最后一个元素的下一个位置//vector<int>::iterator itEnd = v.end();//while (itBegin!= itEnd)//{//    cout << *itBegin << endl;// itBegin++;//}//遍历容器方式二(常用):for循环//for (vector<int>::iterator itBegin  = v.begin(); itBegin!=v.end(); itBegin++)//{//   cout << *itBegin << endl;//}//遍历容器方式三:foreach算法for_each(v.begin(), v.end(), myPrint);}int main()
{test1();system("pause");return 0;
}

push_back:在 vector 容器尾部添加一个元素

2.2、vecto存放自定义数据类型

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>//vector存放自定义数据类型
class Person {public:Person(string name, int age) {this->m_Name = name;this->m_Age = age;}string m_Name;int m_Age;
};void myPrint(Person p)
{cout << "姓名为" << p.m_Name << " 年龄为" << p.m_Age << endl;
}void test01() {Person p1("qq", 12);Person p2("wq", 13);Person p3("eq", 14);Person p4("rq", 15);Person p5("tq", 16);vector<Person> v;v.push_back(p1);v.push_back(p2);v.push_back(p3);v.push_back(p4);v.push_back(p5);for_each(v.begin(), v.end(), myPrint);}//存放自定义数据类型的指针
void test02() {Person p1("qq", 12);Person p2("wq", 13);Person p3("eq", 14);Person p4("rq", 15);Person p5("tq", 16);vector<Person*> v;v.push_back(&p1);v.push_back(&p2);v.push_back(&p3);v.push_back(&p4);v.push_back(&p5);vector<Person*>::iterator itBegin = v.begin();vector<Person*>::iterator itEnd = v.end();for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) {cout << "姓名为" << (*it)->m_Name << " 年龄为" << (*it)->m_Age << endl;}
}
int main() {test01();cout << "-----------------------" << endl;test02();system("pause");return 0;
}

2.3、容器嵌套

#include<iostream>
using namespace std;
#include<vector>//vector嵌套容器
void test03() {vector<vector<int>> v;//创建小容器vector<int> v1;vector<int> v2;vector<int> v3;vector<int> v4;for (int i = 0; i < 4; i++) {v1.push_back(i + 1);v2.push_back(i + 2);v3.push_back(i + 3);v4.push_back(i + 4);}//把小容器放到大容器中v.push_back(v1);v.push_back(v2);v.push_back(v3);v.push_back(v4);for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++) {//(*it)----vector<int>for (vector<int>::iterator vIt = (*it).begin(); vIt != (*it).end(); vIt++) {cout << *vIt << " ";}cout << endl;}
}
int main() {test03();system("pause");return 0;
}

STL技术——STL概述和入门相关推荐

  1. 【有点狂的手撕STL】STL源码剖析精读 000

    STL源码剖析精读 前言 通过刷题感受到了C++中STL的妙用,十分的想要提高自己对于STL的理解以及运用能力,因此开设此专栏,并希望能够带领大家一起感受C++中STL的魅力. 一.STL简介 STL ...

  2. 分享实录|区块链技术与智能合约入门(开发实例)

    2019独角兽企业重金招聘Python工程师标准>>> 1 什么是区块链 1.1白话讲解区块链 现在区块链特别火,可能大家都听说过区块链,听说过比特币,那到底什么是区块链? 前几天和 ...

  3. 智能车技术与实践_ROS入门

    智能车技术与实践--ROS入门 前言:本次作业旨在通过不同的任务使同学掌握ROS基础,包括工作环境.功能包的创建. 预先要求:ubuntu18.04 + ROS melodic 任务一:创建ROS工作 ...

  4. mysql技术内幕sampdb_MySql技术内幕之MySQL入门(1)

    MySql技术内幕之MySQL入门(1) 安装 检查系统中是否已经安装了MySQL sudo netstat -tap | grep mysql 若没有显示已安装结果,则没有安装.否则表示已经安装. ...

  5. 容器编排技术 -- AWS EC2快速入门

    容器编排技术 -- AWS EC2快速入门 前提条件 1.您需要一个AWS账户,访问http://aws.amazon.com获得. 2.安装并配置AWS命令行界面. 3.你需要一个拥有EC2全部权限 ...

  6. 容器编排技术 -- Google Computer Engine入门

    容器编排技术 --  Google Computer Engine入门 下面的例子用4个节点虚拟机和1个主虚拟机(也就是说集群中使用了5个虚拟机)创建了一个Kubernetes集群.您可以在您的工作站 ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  8. 语音识别技术原理概述!

    原标题:语音识别技术原理概述! 语音识别的基本原理 所谓语音识别,就是将一段语音信号转换成相对应的文本信息,系统主要包含特征提取.声学模型,语言模型以及字典与解码四大部分,其中为了更有效地提取特征往往 ...

  9. CTC 技术介绍概述——啃论文系列

    CTC 技术介绍概述--啃论文系列 文章目录 CTC 技术介绍概述--啃论文系列 自我介绍 摘要 前言 知识导图 1. 定义 2. 诞生背景 2.1 频谱紧张 例子,wifi的5GHz 2.2 通信干 ...

最新文章

  1. 2022-2028年中国抗盐粘土行业发展现状调查及前景战略分析报告
  2. inet_pton和inet_ntop函数
  3. Java序列化的机制和原理
  4. R语言ggplot2可视化绘制Marimekko/Mosaic图实战:自定义函数绘制Marimekko/Mosaic图(添加数值、标题、色彩配置)、ggmosaic包绘制Marimekko图
  5. linux怎么获取当前路径,linux 下获取当前工作路径的实例
  6. 重磅亮相KubeCon China,腾讯云为你揭秘国内云商最大容器集群
  7. 商业逻辑12讲之管理思维的逻辑
  8. python os函数_python os模块主要函数
  9. java定时器异常,定时任务异常 高手进
  10. sublime text 3配置Kotlin
  11. Python中DataFrame去重
  12. 算法直观与对模型的理解
  13. 函数内联inline
  14. 基于SSM的电脑商城
  15. 积分墙广告平台接入指路
  16. Python创建分栏排版的Word文档
  17. python爬取qq音乐歌词风变编程_风变编程的Python课,让我离掌握编程又进了一步...
  18. VMotion and Storage VMotion
  19. FlexRay在AUTOSAR的实施
  20. 力扣 1539. 第 k 个缺失的正整数

热门文章

  1. 如何还原系统?系统还原教程
  2. 汇编语言期末重点知识点总结
  3. 汽车车速传感器中的秒脉冲设计 大家新年快乐呀
  4. 强推4款数据恢复神器,数据误删不烦恼
  5. substance-Substance_Designer记录
  6. 计算机毕业设计之校园网上点餐系统
  7. 【机器学习】京东用户购买意向预测-数据集介绍和数据清洗 - 1
  8. 利用驱动页---批量输出宗地图
  9. 2021年P气瓶充装考试及P气瓶充装模拟考试
  10. 5个可遇不可求的资源网站 赶紧收藏起来