【C++】STL简介

简介: 【C++】STL简介

什么是STL

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,还是一个包罗数据结构与算法的软件框架。

 俗话说的好,不懂STL,不要说你会C++。C++中拥有许多底层的数据结构以及算法,有了STL就不需要自己造轮子了,不得不承认我们大多数人都喜欢自己造轮子,总觉得自己造的轮子会与众不同,实际上可能还比不上别人提供的轮子。

STL版本

 原始版本(HP版本)

 Alexander Stepanov、Meng Lee在惠普实验室完成的原始版本,这一版本允许任何人任意的运用、拷贝、修改、传播、商业使用,并且无需付费。唯一的条件就是修改之后的版本也需要像原始版本一样开始使用,因此HP版本是当前所有STL实现版本的始祖。最牛的技术永远是开源的!(小声逼逼)

P.J.版本

  由P.J.Plauger基于HP版本开发,被Windows visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名很怪异。

RW版本

  是Rouge Wage公司开发的,也是基于的HP版本,被C++ Builder采用,不能公开或修改,可读性一般。

SGI版本

  由Silicon Graphics Computer Systems,Inc公司开发,同样是基于HP版本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。

STL六大组件

 容器

  名字非常高大上,实际上就是数据结构,比如:string、vector、list、deque、map等。

算法

  常见的有find、swap、reverse、sort、merge等。

 仿函数

  greater、less……

 空间配置器

 一些频繁需要访问内存空间的容器由空间配置器在内存池上分配内存,内存池的内存也是来源于堆上的。

 迭代器

  iterator、const_iterator、reverse_iterator、const_reverse_iterator。

配接器

  stack、queue、priority_queue。

STL缺陷

  1. STL库的更新很慢;
  2. STL没有支持线程安全,并发环境下需要自己加锁。且锁的粒度是比较大的;
  3. STL极度的追求效率,导致内部比较复杂;
  4. STL的使用会有代码膨胀的问题,这是模板语法本身导致的。
目录
相关文章
|
5天前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
22 7
|
23天前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
48 4
|
24天前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
50 5
|
24天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2
|
29天前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
47 0
|
8天前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
18 0
|
2月前
|
存储 程序员 C++
C++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
79 5
|
2月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
70 1
|
2月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
2月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
43 0