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 ...
随机推荐
- Linux常用命令,面试常考
Linux常用命令 网络工具 查看监听端口的进程: lsof -i :8080 或者 netstat -tupln|grep 8080 复制 软连接创建 ln -s 源文件 目标文件
- mac brew安装
mac 安装homebrew出错 Failed to connect to raw.githubusercontent.com port 443: Connection refused error:原 ...
- tree目录结构
https://www.cnblogs.com/richard-youth/p/6297827.html 常用命令 tree -Cd -L 3 相信很多使用过Linux的用户都用过tree命令,它可以 ...
- 花里胡哨之自定义linux终端前缀显示
文章目录 1.先看默认的linux终端前缀 2.查看默认的终端前缀变量 3.符号所代表的意义 4.修改PS1变量,达成自定义效果 4.1.只显示主机名和完整目录 4.2.给他点颜色看看 5.谢幕 1. ...
- c++编译加执行脚本
python 脚本 1 #! /usr/bin/python 2 3 import os 4 5 msg = os.popen("g++ test.cpp").read(); 6 ...
- Redis小秘密
Redis小秘密 临渊羡鱼,不如退而织网. 一.Redis基本数据类型 想必很多人都能脱口而出String.List.Hash.Sorted Set和Set五种基本数据类型. 以及五大基本数据类型简要 ...
- WPF 自定义文本框输入法 IME 跟随光标
本文告诉大家在 WPF 写一个自定义的文本框,如何实现让输入法跟随光标 本文非小白向,本文适合想开发自定义的文本框,从底层开始开发的文本库的伙伴.在开始之前,期望了解了文本库开发的基础知识 本文实现的 ...
- Linux之基本命令
(1)pwd 打印当前工作目录 (2)ls 列出当前工作目录中所有目录和文件的命令 ls -l 列出详细信息 -i 列出innode (3)cd 切换目录 cd ../切换到上级目录即/hom ...
- 防世界之Web_warmup
题目: 啥都没有,右键打开页面源代码查看一下 发现source.php源文件,输入http://111.200.241.244:53776/source.php看看 <?php high ...
- 这个数据分析工具秒杀Excel,可视化分析神器!
入门Excel容易,想要精通就很难了,大部分人通过学习能掌握60%的基础操作,但是一些复杂数据可视化分析就需要用到各种技巧,操作理解难度加深 Excel作为一直是使用最广泛的数据表格工具,在数据量日 ...