【STL和泛型编程】1. STL基础和容器名称
1. STL 六大部件
STL的部件(Components)
- 容器(Containers)
- 分配器(Allocator)
- 算法(Algorithms)
- 迭代器(Iterators)
- 适配器(Adapters)——进行转换
- 仿函数(Functors)

这里是一个使用了全部6种STL部件的代码案例
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
int main()
{
int p[6] = { 27, 210, 12, 47, 109, 83 };
// 容器(container): vector
// 分配器(allocator): allocator<int>
vector<int, allocator<int>> vi(p, p + 6);
// 迭代器(iterator): vi.begin(), vi.end();
// 算法(algorithm): count_if (操作整个容器的头到尾)
// 适配器(adapter): not1: 相反的, bind2nd: 绑定第二个参数
// 仿函数(function): 比他小
cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
// 计数:所有比40大的数
}
2. 迭代器(iterator)
// 获取一个迭代器
vector<int> vint;
vector<int>::iterator it = vint.begin();
// C++11
for(auto elem : vint) {
std::cout << elem << std::endl;
}
3. 容器分类(container)
3.1 队列容器
- Array:事先分配元素个数的数组
- Vector:可以在尾部进行数组容量的扩充
- Deque:双端队列,可以在头部和尾部插入元素(pop_front、pop_back,push_front,push_back)
- Queue:队列,可以在尾部排队,头部离开
- List:双向链表
- Forward-List:单项链表
3.2 关系容器
- Set / Multiset:直接存储Value
- Map / Multimap:存储Key/Value,通过Key查找Value
- Unordered Set / Multiset:不进行排序
- Unordered Map / Multimap:不进行排序

array<int, 100> myArray:声明一个长度为100的array数组
- vector<int> myVector:声明一个变量类型为int的vector数组
- size() 当前元素个数
- capacity() 容量
- front() 第一个元素
- back() 最后一个元素
- data() 元素起始地址
- list<int> myList:声明一个变量类型为int的双向链表
- size() 当前元素个数
- max_size() 最大分配数量
- front() 首元素
- back() 为元素
- deque<int> myDeque:声明一个变量类型为int的双端队列(没有iterator,否则会破坏它的性质)
- queue:只保留了先进先出
- stack:只保留了后进先出
- multiset<int> myMultiSet:底层使用红黑树实现,插入完成排序
- insert() 插入元素
- size() 元素个数
- max_size() 最大存储数量
- find() 查找元素
- multimap<int, string> myMulitMap:底层使用红黑树实现,插入完成排序
- insert() 插入元素(自己完成组合 pair<int, string>)
- unordered_multiset<int> myUnMuSet:底层使用哈希表(开链法)
- bucket_count() 篮子的数量(大于元素数量)
- bucket_size(int n) 某个篮子内元素数量(可能为0)
- load_factor() 载重因子
- max_load_factor() 最大载重因子
- unordered_multimap<int, string> myUnMuMap:底层使用哈希表(开链法)
【STL和泛型编程】1. STL基础和容器名称的更多相关文章
- [GeekBand] STL与泛型编程(1)
在C++语法的学习过程中,我们已经对模板有了基本的了解.泛型编程就是以模板为工具的.泛化的编程思想.本篇文章介绍了一些在之前的文章中没有涉及到的一些模板知识.泛型编程知识和几种容器.关于模板的一些重复 ...
- 泛型编程、STL的概念、STL模板思想及其六大组件的关系,以及泛型编程(GP)、STL、面向对象编程(OOP)、C++之间的关系
2013-08-11 10:46:39 介绍STL模板的书,有两本比较经典: 一本是<Generic Programming and the STL>,中文翻译为<泛型编程与STL& ...
- [GeekBand] STL与泛型编程(2)
本篇文章在上一篇文章的基础上进一步介绍一些常用的容器以及STL的一些深入知识. 一. Stack和Queue 栈和队列是非常常用的两种数据结构,由deque适配而来.关于数据结构的知识这里就不在介绍了 ...
- STL非变易算法 - STL算法
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/1394600460.html 原创:ST ...
- STL源码剖析:关联式容器
AVL树 AVL树定义:红黑树是一颗二叉搜索树,特别的是一棵保持高度平衡的二叉搜索树 AVL树特点: 每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1 AVL树插入: 说明:新增节点的平衡因子 ...
- STL源码剖析之序列式容器
最近由于找工作需要,准备深入学习一下STL源码,我看的是侯捷所著的<STL源码剖析>.之所以看这本书主要是由于我过去曾经接触过一些台湾人,我一直觉得台湾人非常不错(这里不涉及任何政治,仅限 ...
- C++STL模板库序列容器之List容器
目录 一丶List容器的存储结构 二丶丶STL中list容器的使用. 一丶List容器的存储结构 list容器底层是链表结构来维护的.跟vector不一样. vector是数组维护的.拥有连续内存.所 ...
- c++ stl源码剖析学习笔记(三)容器 vector
stl中容器有很多种 最简单的应该算是vector 一个空间连续的数组 他的构造函数有多个 以其中 template<typename T> vector(size_type n,cons ...
- C/C++知识要点2——STL中Vector、Map、Set容器的实现原理
1.Vector是顺序容器.是一个动态数组.支持随机存取.插入.删除.查找等操作,在内存中是一块连续的空间.在原有空间不够情况下自己主动分配空间.添加为原来的两倍.vector随机存取效率高,可是在v ...
- STL源码剖析:序列式容器
前言 容器,置物之所也.就是存放数据的地方. array(数组).list(串行).tree(树).stack(堆栈).queue(队列).hash table(杂凑表).set(集合).map(映像 ...
随机推荐
- 推荐一个Elasticsearch ES可视化客户端工具:ES-King,支持win、mac、linux
ES-King:开源免费,一个现代.实用的ES GUI客户端,支持多平台. 下载地址:https://github.com/Bronya0/ES-King 我之前开源的kafka客户端kafka-ki ...
- SQL注入常用爆库语句
SQL注入的时候,找到了注入点,但是老是搞不清怎么爆库,最后还是得看大佬的WP 最后,终于下定决心自己整理一下爆库的常用语句和思路,如果哪里写的不对麻烦在评论区指出:-D 省流概要 select gr ...
- Web前端入门第 60 问:JavaScript 各种数组定义与数组取值方法
数组可以算是程序里面最常用的数据结构了,但凡网页上任何一个列表数据,基本都是以数组的形式存在,像表格.banner图.菜单列表.商品列表,分类列表等等,在前端领域都是以数组处理. 数组的定义 JS 的 ...
- Go交叉编译
#在Mac上编译linux平台应用 GOOS=linux GOARCH=amd64 go build hello.go #在Windows上编译linux平台应用(关闭CGO) CGO_ENABLED ...
- slf4j、logback、log4j、log4j2的区别
区别 slf4j是一个日志接口,自己没有具体实现日志系统,只提供了一组标准的调用api,这样将调用和具体的日志实现分离,使用slf4j后有利于根据自己实际的需求更换具体的日志系统,比如,之前使用的具体 ...
- 【2020.11.25提高组模拟】树的解构(deconstruct) 题解
[2020.11.25提高组模拟]树的解构(deconstruct) 题解 题目描述 给一棵以\(1\)为根的外向树,进行\((n-1)\)次删边操作,每次都会从没有删掉的边中等概率地删掉一条边\(a ...
- equals与==与hashCode的区别与联系
equals与hashcode的区别与联系 1."=="与equals的区别与联系 (1)"=="对于基本数据类型,只要值相等,就返回true,否则返回fals ...
- AEM6.5集成Redis详细步骤(附代码)
一.环境准备 Redis 安装 2.配置 Redis 远程访问 二.AEM 端配置 1.添加 Redis 客户端依赖 在 AEM 项目的pom.xml中添加: <dependency> & ...
- UFT 关于excel及datatable的处理
1. excel 2. datatable
- 敏捷 | 如何做好服务型Scrum Master?
无论你的公司是在做敏捷转型还是一开始就使用敏捷,敏捷都是一场变革,会带来组织方式和文化理念上的改变.与此同时,敏捷也对领导力提出了新的需求,需要我们转变观念,成为一名服务型领导. 相关阅读: (1)如 ...