1.1 STL基本概念
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基本概念的更多相关文章
- 泛型编程、STL的概念、STL模板思想及其六大组件的关系,以及泛型编程(GP)、STL、面向对象编程(OOP)、C++之间的关系
2013-08-11 10:46:39 介绍STL模板的书,有两本比较经典: 一本是<Generic Programming and the STL>,中文翻译为<泛型编程与STL& ...
- STL 基本概念
STL 基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现在是一个C++软件库,也是C++标准程序库的一部分,但在被引入C++之前 ...
- 7.4 C++标准模板库(STL)的概念
参考:http://www.weixueyuan.net/view/6401.html 总结: 标准模板库为C++提供了完善的数据结构及算法. 标准模板库包括三部分:容器.算法和迭代器. 容器是对象 ...
- 63)对于STL基本概念东西 自己百度(没有整理)
基础知识 看 C++进阶课程讲义的那个word文档
- stl中的容器、迭代器和算法----vector中的find实现
来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的 ...
- stl之容器、迭代器、算法几者之间的关系
转自:https://blog.csdn.net/bobodem/article/details/49386131 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优 ...
- <<C++标准程序库>>中的STL简单学习笔记
0. 内容为个人学习笔记, 仅供参考, 如有错漏, 欢迎指正! 1. STL中的所有组件都是由模板构成的, 所以其元素可以是任意型别的. 组件有: - 容器: 管理某类对象的集合. 不同的容器有各自的 ...
- STL理论基础、容器、迭代器、算法
一.STL基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段 ...
- 【STL学习笔记】一、STL体系
目录 1.标准库以header files形式呈现 2.namespce命名空间 3.STL与OO 4.STL六组件及其关系 5.STL组件例子 6.range-based for statement ...
随机推荐
- js中(function(){}()),(function(){})(),$(function(){});之间的区别
1. (function(){}())与(function(){})() 这两种写法,都是一种立即执行函数的写法,即IIFE (Immediately Invoked Function Express ...
- mybatis的一对多(collection)
使用图解: 低效率查询: 高效率查询: 1 查询用联合查询 2<collection 里面不写column
- 基于Socket实现多人聊天室
当前支持: 1.仅文字 2.加入聊天室提醒 3.退出聊天室提醒 可能出现的BUG: 1.可能出现客户端发送信息后不能及时推送,需要下一个客户端发送信息后一起推送 服务端代码: 1 package co ...
- 虫师Selenium2+Python_12、BDD框架之Lettuce入门
http://www.cnblogs.com/fnng/p/3415609.html P293--简介: TDD(Test-Drivern-Development)测试驱动开发 ATDD(Accept ...
- [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)
[源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 0x00 摘要 0x01 回顾 0x0 ...
- Rust语言开发
Rust开发 第一个程序 fn main() { println!("Hello, world!"); // 带!号的都是宏 并不是函数 } fn main() { let nam ...
- 【软件实施面试】MySQL和Oracle联合查询以及聚合函数面试总结
软件实施面试系列文章第二弹,MySQL和Oracle联合查询以及聚合函数的面试总结.放眼望去全是MySQL,就不能来点Oracle吗?之前面过不少公司,也做过不少笔试题,现在已经很少做笔试题了.你肚子 ...
- Nginx安装启用
安装版本为1.17.8. 1.安装Nginx依赖, pcre. openssl. gcc. zlib(推荐使⽤yum源⾃动安装) yum -y install gcc zlib zlib-devel ...
- Redis——入门学习笔记
Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...
- vscode打开多个文件
vscode短时间内打开多个文件会覆盖原先打开的文件,在右方编辑区只显示一个.若想每次打开,都新创建一个编辑,可以用以下2个简单的方法: 方法一:直接在右侧打开的文件上,Ctrl + S,保存一次,再 ...