STL 漫谈

作者: 2ce0a88c0452 | 来源:发表于2018-05-21 18:54 被阅读144次

STL 是 Standard Template Library 的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。STL 现在是 C++ 标准的一部分,所以正常的 C++ 编译器都包含相应的库文件,可以在编程时直接使用。由于 C++ 标准中只规定 STL 中应该包含接口,不同的编译器在实现这些功能时会有细节上的不同。

STL 版本

目前的编译器中所带的 STL 源代码,都是经过很多工程技巧优化,所以可读性很差。推荐阅读一些早期的版本,比如 SGI STL v3.0等。同时可以搭配《STL 源码剖析》阅读。

STL 组成

STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

image.png

空间配置器(allocator)

内存分配相关,漫谈中不关注

容器(containers)

容器是指一些 STL 中一些常用的数据结构,取名为容器是应为,这些数据结构可以介绍不同的数据类型。在实现上使用了类模板。

image.png

简单容器 Simple containers

pair

  • 将两个数据类型合成为一个数据类型,类似结构体
  • 头文件 <utility>
  • 定义:pair<T1, T2> myPair
  • 生成对象:make_pair( T1 t, T2 u )
  • 成员变量:.first.second

序列式容器 Sequence containers

array

  • 定长数组
  • 头文件:<array>
  • 定义:array<int,3> a = {1,2,3}
  • 方法:.size() .max_size() .empty()

vector

  • 不定长数组
  • 头文件:<vector>
  • 定义:vector<int> v
  • 方法:.push_back() .pop_back()

Associative containers

map

  • 关联容器
  • 头文件:<map>
  • 定义:map<int, string> myMap
  • 方法:.clear()

set

  • 集合
  • 头文件: <set>
  • 定义:set<int> mySet
  • 方法:.insert() .find()

Unordered associative containers

unordered_map、unordered_mulitmap、unordered_set、unordered_multiset 都是通过 hash 实现的版本,查询时速度比红黑树版本效率高。

算法(algorithms)

STL 中与算法相关的文件有<algorithm>,<numeric>和<functional>。下面介绍一些在 ACM 中常用的算法。

sort

这里介绍一些排序相关的算法。

  • sort(first, last, comp)
  • stable_sort(first, last, comp):sort 的稳定版本
  • is_sorted(first, last, comp) :判断序列是否有序
  • is_sorted_until(first, last, comp):返回第一个无须的迭代器
  • partial_sort(first, mid, last) :部分排序
  • nth_element(first, nth, last, comp):确定第 n 大的元素

permutation

排列相关的算法。

  • next_permutation(first, last, comp) :全排列的下一个
  • prev_permutation(first, last, comp) :全排列的上一个
  • is_permutation():判断是否排列

search

  • lower_bound(first, last, value, comp) :下界
  • upper_bound(first, last, value, comp) :上界
  • binary_search(first, last, value, comp) :二分查找
  • equal_range(first, last, value, comp):第一个可以插入的位置,以及最后一个可以插入的位置

参考

文档软件

通过安装Zeal或者Dash等软件,可以快速查阅相关的语法手册。

image.png

相关文章

  • STL 漫谈

    引 STL 是 Standard Template Library 的简称,中文名标准模板库,惠普实验室开发的一系...

  • STL漫谈

    TraitsIterator是STL的核心思想。Iterator是把针对容器的算法与容器的具体实现分离、解耦的设计...

  • stl简介

    stl stl简介 1. 什么是STL? STL(Standard Template Library),封装基本数...

  • C++标准库结构与使用

    本文预览: 标准库和STL STL的六大组件 STL容器分类 STL容器使用 标准库和STL ** 我们在写C++...

  • GeekBand笔记: STL与泛型编程(容器)

    stl stl 6 componentsallocatorcontaineralgorithmiteratorfu...

  • Boolan - C++学习笔记 _STL - 第一周

    STL与泛型编程 一、STL是什么 STL(Standard TemplateLibrary),即标准模板...

  • C++ STL

    STL STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是...

  • C++基础一文通(六)STL

    一. STL 标准模板库 STL(Standard Template Library,标准模板库) STL 从广义...

  • C++ STL是什么

    STL 组件主要包括容器,迭代器、算法和仿函数。STL 基本结构和 STL 组件对应。 STL 主要由迭代器、算法...

  • C++ STL编程

    一、STL简介 1.1 初识STL STL(Standard Template Library,即标准模版库)是一...

网友评论

  • 米口的主人:我真想在点评栏说几句,可是真心看不懂啊:sob:专业就是专业
  • Ares东:码农😁 😁 😁
  • 简小喵喵:完全看不明白具体什么意思,太专业了!
    重点是,这个逻辑层次,排版结构非常值得学习,一目了然。
  • 金飞昔比one:虽然表示看不懂代码,但是看了你的文章,很有种去学习代码的冲动!

本文标题:STL 漫谈

本文链接:https://www.haomeiwen.com/subject/guuqjftx.html