【温故而知新】C和C++4:STL概览

简介: 一、STL简介 1、什么是STL: 标准模板库(Standard Template Library , STL)是一个C++通用库,其目的在于将组建标准化,节省开发者的时间和精力。

一、STL简介

1、什么是STL:

标准模板库(Standard Template Library , STL)是一个C++通用库,其目的在于将组建标准化,节省开发者的时间和精力。从组织上来看,STL可分为六大部分,分别是迭代器(iterators)、算法(algorithms)、容器(container)、函数对象(function object)、内存分配器(allocator)和配接器(adapter)。其中的代码采用了模板类和模板函数实现,极大地提高了编程效率。STL相对于传统的编程方法,可以更好地实现代码的重用。

STL除了具有节省开发成本的有点之外,还具有以下特点:通用性好;运行效率高;数据结构简单却严谨、层次化好;安全机制完善、有较好的内存管理方法。

2、关于命名空间namespace:

命名空间技术是STL的特性之一,主要用于解决软件的模块组件化而可能产生的命名冲突。这种冲突主要来自不同看模块和库针对不同的对象所采用的相同的标识符表示。命名空间是开放的,因此利用一个namespace定义的一些组件可以散布于多个代码模块内。如C++标准库采用的就是一个命名空间,即“标准命名空间”std。如果在代码中使用了using namespace std;则会默认调用这个std命名空间内的标识符;如果要指定调用某个命名空间的标识符,则需要使用namespace::obj的方法,如:

std::cout<<"Hello World!"<<endl;
需要注意的是,最好不要在头文件、模块等位置使用using namespace声明,因为这可能会改变namespace的作用范围,导致其他模块收到未知的影响。


二、STL的基本结构

1、容器

容器类是STL的基本类之一,是可以包容其他类的结构。常见的有向量类(vector)、链表类(deque)、双向队列(list)、集合(set)、图(map)等。

1)vector<T>:一种容量可变的向量,可以实现顺序表结构的功能;

2)list<T>:双向链表容器,实现链表的功能;

3)queue<T>:队列容器,实现队列结构的功能;

4)stack<T>:栈容器,实现栈数据结构的功能;

5)deque<T>双端队列;

6)priority_queue<T>按值排序的队列;

7)set<T>集合容器

8)multiset<T>多重集合容器,允许出现重复元素;

9)map<key,val>键值对容器,可以实现根据key对val的查询;

10)multimap<key,val>多重键值对,允许出现重复的key值;

根据这些容器的不同特点,可以分为两大类:(1)顺序式容器:vector、list、deque等;(2)关联式容器:set、map等。

2、算法

STL提供了多种针对不同数据结构的算法,定于与std命名空间中,引用如下头文件后可以获取:

#include <algorithm>

一般来说,STL提供的算法函数具有多种优点:定义、操作简单;能根据输入数据的类型自动选择最合适的算法;

具体针对不同对象的算法函数可以参考相关书籍和文档。

3、迭代器

迭代器为访问容器提供了通用的方法,可以允许程序对容器进行反复访问,其作用类似于指向对象的指针。STL定义了5种不同的迭代器,以使用方式分别命名为输入、输出、前向、双向和随机访问5种,可用于不同种类的容器。不同的迭代器的特点和支持的容器类型如下所示:

1)输入迭代器:前向读取,支持istream等;

2)输出迭代器:前向写入,支持ostream、inserter等;

3)前向迭代器:前向读写;

4)双向迭代器:前向+反向读写,支持list、set(包括multiset)、map(包括multimap)等;

5)随机访问迭代器:随机读写,支持vector、deque、string等。

4、函数对象、内存分配器和配接器

所谓函数对象,可以理解为函数的一般形式;配接器主要用于接口间的转换,比如把数据从一个类中移到另一个类;内存分配器应用较少,接触到的时候再详述。







目录
相关文章
|
16天前
|
存储 算法 编译器
[C++] STL简介
[C++] STL简介
12 1
|
22天前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
31 2
|
28天前
|
安全 编译器 容器
C++STL容器和智能指针
C++STL容器和智能指针
|
30天前
|
算法 安全 Linux
|
2月前
|
设计模式 算法 Java
【c++】STL之stack和queue详解
【c++】STL之stack和queue详解
32 1
|
2月前
|
存储 算法 C++
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
【C++高阶】探索STL的瑰宝 map与set:高效数据结构的奥秘与技巧
45 0
|
2月前
|
存储 算法 数据处理
【C++】STL简介
**STL是C++标准库的关键部分,源于Alexander Stepanov的泛型编程研究。它提供了数据结构(如vector、list)和算法,是高效、通用的软件框架。STL始于惠普,后由SGI发展,现已成为C++1998标准的一部分并不断进化。它包括容器、迭代器、算法、仿函数、配接器和分配器六大组件,带来高效性、通用性和可扩展性,但也存在性能开销和学习难度。学习STL涉及理解底层数据结构、用法、实现和实践。推荐[cplusplus.com](https://cplusplus.com)作为学习资源。**
|
2月前
|
存储 算法 程序员
C++基础知识(八:STL标准库(Vectors和list))
C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), lists(链表), 和 stacks(栈)等. STL容器的提供是为了让开发者可以更高效率的去开发,同时我们应该也需要知道他们的底层实现,这样在出现错误的时候我们才知道一些原因,才可以更好的去解决问题。
|
2月前
|
算法 前端开发 C++
C++基础知识(八:STL标准库 deque )
deque在C++的STL(Standard Template Library)中是一个非常强大的容器,它的全称是“Double-Ended Queue”,即双端队列。deque结合了数组和链表的优点,提供了在两端进行高效插入和删除操作的能力,同时保持了随机访问的特性。
|
2月前
|
存储 C++ 索引
C++基础知识(八:STL标准库 Map和multimap )
C++ 标准模板库(STL)中的 map 容器是一种非常有用的关联容器,用于存储键值对(key-value pairs)。在 map 中,每个元素都由一个键和一个值组成,其中键是唯一的,而值则可以重复。