1 STL概述

STL是StandardTemplateLibrary的简称,标准模板库,惠普实验室开发的一系列软件的统称。它是由AlexanderStepanov、MengLee和DavidRMusser在惠普实验室工作时所开发出来的。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。
——搜狗百科

我认为其本质是为了提升代码复用性,使得之后的程序员可以站在前人的肩膀上,不必重复大量造轮子的工作,以减少企业人力资源的浪费等(更好压榨员工(打趣) )。

1.1 STL基本概念

STL广义上分为:容器(container) 算法(algorithm) 迭代器(iterator)

1.2 STL 六大组件

容器(vector,list…)
算法(sort,find…)
迭代器(扮演容器算法之间的胶合剂,所有STL容器都有自己的专属迭代器)
仿函数(行为类似函数,可作为算法的某种策略)
适配器(一种用来修饰容器或者仿函数或迭代器接口的东西)
空间配置器(空间的配置与管理)

六大件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同策略的变化,适配器可以修饰仿函数。

1.3 STL优点

  • 高可重复性
  • 高性能
  • 高移植性

但是正因为程序员不用思考STL具体的实现过程,对于初学者应该尝试自己写。

2.1 容器

序列式容器(排序,如Vector,List,Deque容器)
关联式容器(元素在容器中并没有保存元素置入容器时的逻辑顺序)

2.2 算法

质变算法(运算过程改变区间内元素内容)
非质变算法(不改变,如遍历,查找)

2.3 迭代器

举例:
iterator模式定义:提供一种方法,使之能够依序访问某个容器所含的各个元素,而又无需暴露该容器内部展示方式。
种类:
Input iterator(输入迭代器)
读,不能写;只支持自增运算

Output iterator(输出迭代器)
写,不能读;只支持自增运算

Forward iterator(前向迭代器)
读和写;只支持自增运算

Bidirectional iterator(双向迭代器)
读和写;支持自增和自减运算

Random access iterator(随机访问迭代器)
读和写;支持完整的迭代器算术运算

2.4 示例

#include<iostream>
using namespace std;
#include<algorithm>
#include<string> //容器 vector
#include<vector> void myPrint(int v)
{
cout << v << endl;
} void text02()
{
vector<int> v;//声明
//插入
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
//遍历
vector<int>::iterator itBegin = v.begin();
vector<int>::iterator itEnd = v.end(); //第一种
/*while (itBegin != itEnd)
{
cout << *itBegin << endl;
itBegin++;
}*/ //第二种
/*for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}*/ //第三种(头文件#include<algorithm>,函数myPrint)
for_each(v.begin(), v.end(), myPrint);
} //迭代器 遍历功能 用指针理解,普通指针也算一种迭代器
void text01()
{
int arr[5] = { 1,2,3,4,6 };
int* p = arr;
for (int i = 0; i < 5; i++)
{
cout << *(p++) << endl;
}
} //操作自定义数据类型
class Person
{
public:
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
}; void text03()
{
vector<Person> v;
Person p1("zimei",10);
Person p2("xiedalao", 10);
v.push_back(p1);
v.push_back(p2); //for (auto k : v)
//{
// cout << k.m_Age << k.m_Name << endl;
//}
for (vector<Person>::iterator it = v.begin(); it != v.end(); it++)
{
cout << "name:" << (*it).m_Name << "\tage:" << it->m_Age << endl;
}
} int main()
{
text01();
text02();
text03();
return 0;
}

基于黑马STL课程整理

1.1 STL基本概念的更多相关文章

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

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

  2. STL 基本概念

    STL 基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现在是一个C++软件库,也是C++标准程序库的一部分,但在被引入C++之前 ...

  3. 7.4 C++标准模板库(STL)的概念

    参考:http://www.weixueyuan.net/view/6401.html 总结:  标准模板库为C++提供了完善的数据结构及算法. 标准模板库包括三部分:容器.算法和迭代器. 容器是对象 ...

  4. 63)对于STL基本概念东西 自己百度(没有整理)

    基础知识 看  C++进阶课程讲义的那个word文档

  5. stl中的容器、迭代器和算法----vector中的find实现

    来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...

  6. stl之容器、迭代器、算法几者之间的关系

    转自:https://blog.csdn.net/bobodem/article/details/49386131 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优 ...

  7. <<C++标准程序库>>中的STL简单学习笔记

    0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...

  8. STL理论基础、容器、迭代器、算法

    一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...

  9. 【STL学习笔记】一、STL体系

    目录 1.标准库以header files形式呈现 2.namespce命名空间 3.STL与OO 4.STL六组件及其关系 5.STL组件例子 6.range-based for statement ...

随机推荐

  1. 猪齿鱼平台常用前端css实现方案

    居中 最常用的height + line-height,以及margin:0 auto的居中方式就不再阐述,以下介绍两种容错性高的实现方案. flex布局实现 ​ 猪齿鱼前端日常开发中,我们多以fle ...

  2. 帆软报表(finereport)根据提供的数据求出该日期所在的季度

    根据当前日期求字段中日期的季度 Oracle数据库 select T1.INDEXCODE ,T1.CREATETIME ,CASE when T1.CREATETIME = (case when t ...

  3. node(s) didn‘t match node selector.

    k8s集群中,有pod出现了 Pending ,通过 kubectl describe pod 命令,发现了如下报错 0/4 nodes are available: 1 node(s) had ta ...

  4. python 百宝箱

    百宝箱 1. 正则表达式 删除缓存文件 os.system("/sbin/fuser -k .nfs*") os.system("rm -rf .nfs*") ...

  5. 看SparkSql如何支撑企业数仓

    企业级数仓架构设计与选型的时候需要从开发的便利性.生态.解耦程度.性能. 安全这几个纬度思考.本文作者:惊帆 来自于数据平台 EMR 团队 前言 Apache Hive 经过多年的发展,目前基本已经成 ...

  6. opencv安装实录附十几行C++实现的一个人脸识别demo

    前言: 之前写过一篇在nano上使用opencv,nano上默认是安装了opencv的库,除了nano,我们自己电脑上也想使用opencv做一些平时图像处理验证. 本来也是看一些资料安装好的,觉得也没 ...

  7. SIMD编码/解码

    在看SEAL库和HElib库中经常在编码中碰到打包(batch)技术,另外还提到了SIMD编码技术,有点困惑,编码.打包.SIMD到底有什么关系? 编码 在CKKS方案中,因为明文空间在复数域上,简单 ...

  8. 内省机制(操作javaBean的信息)

    内省机制(操作javaBean的信息) ----是不是联想到了反射机制了哈,这两者有什么区别呢? 1.内省机制和反射机制的联系 ■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类 ...

  9. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  10. 16进制转字符串得到flag

    工业协议分析2 666c61677b37466f4d3253746b6865507a7d