下面进行STL的学习。希望能了解标准模板库中的常用容器,迭代器,可以自由运用STL以提高编写代码的效率。下面的内容我想以知识点为总结,不再像《Effective C++》那样以章节进行总结,这样写可能毫无组织,但可以看到整个学习的历程。点击查看Evernote原文

#@author:       gr
#@date:         2014-07-18
#@email:        forgerui@gmail.com

### 一、Contents

  1. 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;}};
  2. 默认模板参数
    template<typename T, typename Allocator = allocator<T> >class vector{// ...}

通过allocator<T>为第2个模板参数Allocator赋一个初值,allocator类型(用户自己定义的一个类)则在未提供第二个模板时使用。这样,vector<int>vector<int, allocator<int>都是可以的。

  1. 容器

    • 序列容器
    • vector<T>:提供对变长序列的随机访问
    • deque<T>:提供对变长序列的随机访问
    • list<T>:提供对变长序列的线性时间访问O(N),其中N是序列的当前长度。
    • 顺序关联容器
    • set<Key> 惟一的键
    • multi<Key> 可重复的键
    • map<Key, T> 惟一的键索引类型T
    • multimap<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;}
  2. 类属算法
   //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());
  1. 迭代器
  • 输入迭代器
  • 输出迭代器
  • 前向迭代器
  • 双向迭代器
  • 随机访问迭代器
  • 插入迭代器
    • back_insert_iterator
    • front_insert_iterator
    • insert_iterator
  • 流迭代器
    • istream_iterator
    • ostream_iterator
  1. 函数对象

  2. 适配器

  3. 分配器

### 二、References

  1. 迭代器和类属算法介绍

转载于:https://www.cnblogs.com/gr-nick/p/3880243.html

###STL学习--标准模板库相关推荐

  1. c++ stl(标准模板库)

    1. 引言 STL(标准模板库),从广义上分为:容器,算法,迭代器,容器和算法之间通过迭代器进行无缝连接. 在 c++ 标准种,STL被组织成以下13个头文件: <algorithm> & ...

  2. stl标准模板库_如何在C ++ STL(标准模板库)中使用Pair

    stl标准模板库 In this article, we'll take a look at using pair in C++ Standard Template Library (STL). 在本 ...

  3. CSP-J CSP-S NOIP 算法竞赛中的STL(标准模板库)

    P1996 约瑟夫问题 2037:[例5.4]约瑟夫问题 P1996 约瑟夫问题 2037:[例5.4]约瑟夫问题_dllglvzhenfeng的博客-CSDN博客 C++ STL详解超全总结(快速入 ...

  4. STL(标准模板库)--容器(一)

    STL-----容器 1. 序列容器 1.1 array 1.2 vector 1.3 deque 1.4 list 1.5 容器中常见的函数成员 2. 容器适配器 2.1 stack 2.2 que ...

  5. C++ STL标准模板库简介

    文章目录 1. 什么是STL? 2. STL的优势 3. STL版本? 4. STL的六大组件 5. 学习建议 6. 为什么需要迭代器? 7. 自己实现迭代器iterator 8. STL中的5种迭代 ...

  6. 信息学奥赛中的STL(标准模板库)--2022.09.30

    1.信息学奥赛一本通 第5版 第8章 C++实用技巧与模版库(6节) 第一节  排序算法 第二节 运算符重载 第三节  字符串(string) 第四节 FIFO队列和优先队列 第五节  动态数组 第六 ...

  7. C++ STL标准模板库

    C++ STL(标准模板库) C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. ...

  8. c++--标准模板库(STL)

    要看懂STL相关,必须了解c++模板 目录 STL是什么 c++标准模板库包含三个组件 算法 迭代器 迭代器的种类 示例程序 容器 常用的容器(编程练习) string :字符串容器 vector : ...

  9. 【STL】C++标准模板库——stack(堆栈)

    01.目录 文章目录 01.目录 02.C++标准模板库--stack介绍 03.stack成员函数表 04.stack成员函数详解 4.1. push() 4.2. pop() 4.3. size( ...

最新文章

  1. Elasticsearch入常用RESTful API总结
  2. 史上最详尽的NLP预处理模型汇总
  3. :focus-within的冒泡触发
  4. 洛谷P2501数字序列 动态规划
  5. ios7中使用scrollview来横向滑动图片,自动产生偏移竖向的偏移 问题
  6. Hadoop学习笔记一:单节点安装
  7. 信捷plc用c语言编程软件,XDPPro(信捷PLC编程软件) V3.1.0c 官方版
  8. 对于J2EE体系架构的理解
  9. VMware Fusion Pro v10.1.6 苹果虚拟机免费版及解锁许可证
  10. linux 上u盘打不开了,U盘打不开怎么办-八种方法汇总
  11. linux系统终端快捷键,Linux终端快捷键整理
  12. Oracle 执行计划篇
  13. 自顶向下(top down)简介
  14. 如何打开VS的命令行界面
  15. e5服务器系列天梯图,至强e5系列cpu天梯图_2020年5月至强e5天梯图排行
  16. 自媒体必死 大家不要被马化腾忽悠了
  17. 基于 AHB 总线的 SRAM 控制器设计
  18. GitHub的使用(上)
  19. 做个大气的女人,不应该自满
  20. 20200725 error Cyclic behavior during switching.

热门文章

  1. Python notes
  2. Logback 配置文件这么写,TPS 提高 10 倍!
  3. 业务代码中,太多 if else 怎么办?
  4. 跟面试官聊到JVM,他99%会让你谈谈这个问题!
  5. 10 种保护 Spring Boot 应用的绝佳方法
  6. # 管道已结束_CIPP内衬紫外线固化法用于污水管道非开挖修复
  7. 运维人员 | 需要了解的数据中心的网络威胁
  8. 腾讯数据中心负责人揭秘:半年时间如何搭好“山洞鹅厂”
  9. opengl源码 实现无缝切换图片过场_手把手讲解 Android hook技术实现一键换肤
  10. C++:C++语言入门级基础知识考察点回顾之基本数据类型、流程控制