###STL学习--标准模板库
下面进行STL的学习。希望能了解标准模板库中的常用容器,迭代器,可以自由运用STL以提高编写代码的效率。下面的内容我想以知识点为总结,不再像
《Effective C++》
那样以章节进行总结,这样写可能毫无组织,但可以看到整个学习的历程。点击查看Evernote原文。
#@author: gr
#@date: 2014-07-18
#@email: forgerui@gmail.com
### 一、Contents
- C++模板
- 类模板
template<typename T1, typename T2>class Test{//下面的函数使用了T1,T2模板int count(T1 x, T2 y){return x.num + y.num; }};
- 函数模板
//使用传进来的str构造一个容器类Container template<typename Container> T make(string str){return Container(str.begin(), str.end()); } //----------------------------------------------- //make函数的使用vector, list, deque... vector<char> vStr = make<vector<char>>("hello"); list<char> lStr = make<list<char>>("hello"); deque<char> dStr = make<deque<char>>("hello"); // ...
- 成员函数模板(在类模板中,还可以使用成员函数模板,两者不受影响)
template<typename T1, typename T2>class Test{//下面的函数使用了T1,T2模板int count(T1 x, T2 y){return x.num + y.num; }template<typename T>void show(T x){std::cout<<x.num<<endl;}};
- 默认模板参数
template<typename T, typename Allocator = allocator<T> >class vector{// ...}
通过allocator<T>
为第2个模板参数Allocator
赋一个初值,allocator
类型(用户自己定义的一个类)则在未提供第二个模板时使用。这样,vector<int>
和vector<int, allocator<int>
都是可以的。
- 容器
- 序列容器
vector<T>
:提供对变长序列的随机访问deque<T>
:提供对变长序列的随机访问list<T>
:提供对变长序列的线性时间访问O(N),其中N是序列的当前长度。- 顺序关联容器
set<Key>
惟一的键multi<Key>
可重复的键map<Key, T>
惟一的键索引类型Tmultimap<Key, T>
可重复的键索引类型T
#include<map>using namespace std;int main(){map<string, long>directory;directory["A"] = 1;directory["B"] = 2;directory["C"] = 3;string name = "B";//查找namemap<string, long>::iterator it = directory.find(name);if (it != directory.end())cout<<"find the str, value is "<<*it<<endl;}
- 类属算法
//1. reverse: 逆序reverse(vector.begin(), vector.end()); //2. find: 在序列中查找特定值'e'string::iterator it = find(str.begin(), str.end(), 'e');//map中的findmap<Key, T>::iterator it = _map.find(key); //3. merge: 将两个容器中的东西拷贝到一个容器中/*** @func: merge* @params: first1, last1分别表示输入序列的起始和终止位置* @params: first2, last2分别表示另一个输入序列的起始和终止位置* @params: result表示合并后序列存放的位置* @example: 合并string与list到deque* merge(str, str+strlen(str), list1.begin(), list1.end(), deque1.begin());* merge(str.begin(), str.end(), list1.begin(), list1.end(), deque1.begin());* * @comments: !!!注意,这里的两个输入都必须是升序排列的,否则报错*/merge(first1, last1, first2, last2, result);//4. replace: 替换其中的值replace(a.begin(), a.end(), 'a', 'b');//5. copy: 拷贝一段东西到另一个容器中copy(a.begin(), a.end(), b.begin());
- 迭代器
- 输入迭代器
- 输出迭代器
- 前向迭代器
- 双向迭代器
- 随机访问迭代器
- 插入迭代器
- back_insert_iterator
- front_insert_iterator
- insert_iterator
- 流迭代器
- istream_iterator
- ostream_iterator
函数对象
适配器
分配器
### 二、References
- 迭代器和类属算法介绍
转载于:https://www.cnblogs.com/gr-nick/p/3880243.html
###STL学习--标准模板库相关推荐
- c++ stl(标准模板库)
1. 引言 STL(标准模板库),从广义上分为:容器,算法,迭代器,容器和算法之间通过迭代器进行无缝连接. 在 c++ 标准种,STL被组织成以下13个头文件: <algorithm> & ...
- stl标准模板库_如何在C ++ STL(标准模板库)中使用Pair
stl标准模板库 In this article, we'll take a look at using pair in C++ Standard Template Library (STL). 在本 ...
- CSP-J CSP-S NOIP 算法竞赛中的STL(标准模板库)
P1996 约瑟夫问题 2037:[例5.4]约瑟夫问题 P1996 约瑟夫问题 2037:[例5.4]约瑟夫问题_dllglvzhenfeng的博客-CSDN博客 C++ STL详解超全总结(快速入 ...
- STL(标准模板库)--容器(一)
STL-----容器 1. 序列容器 1.1 array 1.2 vector 1.3 deque 1.4 list 1.5 容器中常见的函数成员 2. 容器适配器 2.1 stack 2.2 que ...
- C++ STL标准模板库简介
文章目录 1. 什么是STL? 2. STL的优势 3. STL版本? 4. STL的六大组件 5. 学习建议 6. 为什么需要迭代器? 7. 自己实现迭代器iterator 8. STL中的5种迭代 ...
- 信息学奥赛中的STL(标准模板库)--2022.09.30
1.信息学奥赛一本通 第5版 第8章 C++实用技巧与模版库(6节) 第一节 排序算法 第二节 运算符重载 第三节 字符串(string) 第四节 FIFO队列和优先队列 第五节 动态数组 第六 ...
- C++ STL标准模板库
C++ STL(标准模板库) C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. ...
- c++--标准模板库(STL)
要看懂STL相关,必须了解c++模板 目录 STL是什么 c++标准模板库包含三个组件 算法 迭代器 迭代器的种类 示例程序 容器 常用的容器(编程练习) string :字符串容器 vector : ...
- 【STL】C++标准模板库——stack(堆栈)
01.目录 文章目录 01.目录 02.C++标准模板库--stack介绍 03.stack成员函数表 04.stack成员函数详解 4.1. push() 4.2. pop() 4.3. size( ...
最新文章
- Elasticsearch入常用RESTful API总结
- 史上最详尽的NLP预处理模型汇总
- :focus-within的冒泡触发
- 洛谷P2501数字序列 动态规划
- ios7中使用scrollview来横向滑动图片,自动产生偏移竖向的偏移 问题
- Hadoop学习笔记一:单节点安装
- 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
- 对于J2EE体系架构的理解
- VMware Fusion Pro v10.1.6 苹果虚拟机免费版及解锁许可证
- linux 上u盘打不开了,U盘打不开怎么办-八种方法汇总
- linux系统终端快捷键,Linux终端快捷键整理
- Oracle 执行计划篇
- 自顶向下(top down)简介
- 如何打开VS的命令行界面
- e5服务器系列天梯图,至强e5系列cpu天梯图_2020年5月至强e5天梯图排行
- 自媒体必死 大家不要被马化腾忽悠了
- 基于 AHB 总线的 SRAM 控制器设计
- GitHub的使用(上)
- 做个大气的女人,不应该自满
- 20200725 error Cyclic behavior during switching.
热门文章
- Python notes
- Logback 配置文件这么写,TPS 提高 10 倍!
- 业务代码中,太多 if else 怎么办?
- 跟面试官聊到JVM,他99%会让你谈谈这个问题!
- 10 种保护 Spring Boot 应用的绝佳方法
- # 管道已结束_CIPP内衬紫外线固化法用于污水管道非开挖修复
- 运维人员 | 需要了解的数据中心的网络威胁
- 腾讯数据中心负责人揭秘:半年时间如何搭好“山洞鹅厂”
- opengl源码 实现无缝切换图片过场_手把手讲解 Android hook技术实现一键换肤
- C++:C++语言入门级基础知识考察点回顾之基本数据类型、流程控制