C++常用基础知识—STL库(1)

简介: C++常用基础知识—STL库(1)

本文介绍C++常用的STL库知识,常用的函数及其用法,为备战C++编程比赛的朋友及对STL库函数应用时的快速查找提供方便。

后续还会继续更新,请大家多多支持!!!

  1. STL简介
  2. 顺序性容器
    2.1 C++ Vector(向量容器)
    2.2 C++ List(双向链表)

1 STL 简介

C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如queues(队列)lists(链表)和 stacks(栈)

C++ STL 提供给程序员以下三类数据结构的实现:

标准容器类

顺序性容器

vector从后面快速的插入与删除,直接访问任何元素

deque从前面或后面快速的插入与删除,直接访问任何元素

list 双链表从任何地方快速插入与删除

关联容器

set 快速查找,不允许重复值

multiset 快速查找,允许重复值

map 一对多映射,基于关键字快速查找,不允许重复值

multimap 一对多映射,基于关键字快速查找,允许重复值

容器适配器

stack 后进先出

queue 先进先出

priority_queue 最高优先级元素总是第一个出列

程序员使用复杂数据结构的最困难的部分已经由STL完成. 如果程序员想使用包含int数据的stack, 他只要写出如下的代码:

stack<int> myStack;

接下来, 他只要简单的调用 push() 和 pop() 函数来操作栈. 借助 C++ 模板的威力, 他可以指定任何的数据类型,不仅仅是int类型. STL stack实现了栈的功能,而不管容纳的是什么数据类型.

2 顺序性容器

2.1 C++ Vector(向量容器)

一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。

1.Constructors 构造函数

vector<int> v1; //构造一个空的vector
vector<int> v1( 5, 42 ); //构造了一个包含5个值为42的元素的Vector

2.Operators 对vector进行赋值或比较

C++ Vectors能够使用标准运算符: ==, !=, <=, >=, <, 和 >.

要访问vector中的某特定位置的元素可以使用 [] 操作符.

两个vectors被认为是相等的,如果:

1.它们具有相同的容量

2.所有相同位置的元素相等.

vectors之间大小的比较是按照词典规则.

3.assign() 对Vector中的元素赋值

语法:

void assign( input_iterator start, input_iterator end );
// 将区间[start, end)的元素赋到当前vector
void assign( size_type num, const TYPE &val );
// 赋num个值为val的元素到vector中,这个函数将会清除掉为vector赋值以前的内容.

4.at() 返回指定位置的元素

语法:

TYPE at( size_type loc );//差不多等同v[i];但比v[i]安全;

5.back() 返回最末一个元素

6.begin() 返回第一个元素的迭代器

7.capacity() 返回vector所能容纳的元素数量(在不重新分配内存的情况下)

8.clear() 清空所有元素

9.empty() 判断Vector是否为空(返回true时为空)

10.end() 返回最末元素的迭代器(译注:实指向最末元素的下一个位置)

11.erase() 删除指定元素

语法:

iterator erase( iterator loc );//删除loc处的元素

iterator erase( iterator start, iterator end );//删除start和end之间的元素

12.front() 返回第一个元素的引用
13.get_allocator() 返回vector的内存分配器

14.insert() 插入元素到Vector中

语法:

iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val );
//在指定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end );
//在指定位置loc前插入区间[start, end)的所有元素

15.max_size() 返回Vector所能容纳元素的最大数量(上限)

16.pop_back() 移除最后一个元素
17.push_back() 在Vector最后添加一个元素
18.rbegin() 返回Vector尾部的逆迭代器
19.rend() 返回Vector起始的逆迭代器

20.reserve() 设置Vector最小的元素容纳数量
//为当前vector预留至少共容纳size个元素的空间

21.resize() 改变Vector元素数量的大小

语法:

void resize( size_type size, TYPE val );
//改变当前vector的大小为size,且对新创建的元素赋值val

22.size() 返回Vector元素数量的大小
23.swap() 交换两个Vector

语法:

void swap( vector &from );
2.2 C++ List(双向链表)

一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并由指针将有序的元素链接起来。

1.assign() 给list赋值

语法:

void assign( input_iterator start, input_iterator end );
//以迭代器start和end指示的范围为list赋值
void assign( size_type num, const TYPE &val );
//赋值num个以val为值的元素。

2.back() 返回最后一个元素的引用
3.begin() 返回指向第一个元素的迭代器
4.clear() 删除所有元素
5.empty() 如果list是空的则返回true
6.end() 返回末尾的迭代器
7.erase() 删除一个元素

语法:

iterator erase( iterator loc );//删除loc处的元素
iterator erase( iterator start, iterator end ); //删除start和end之间的元素

8.front() 返回第一个元素的引用
9.get_allocator() 返回list的配置器

10.insert() 插入一个元素到list中

语法:

iterator insert( iterator loc, const TYPE &val );
//在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器,
void insert( iterator loc, size_type num, const TYPE &val );
//定位置loc前插入num个值为val的元素
void insert( iterator loc, input_iterator start, input_iterator end );
//在指定位置loc前插入区间[start, end)的所有元素

11.max_size() 返回list能容纳的最大元素数量

12.merge() 合并两个list

语法:

void merge( list &lst );//把自己和lst链表连接在一起
void merge( list &lst, Comp compfunction );
//指定compfunction,则将指定函数作为比较的依据。

13.pop_back() 删除最后一个元素
14.pop_front() 删除第一个元素
15.push_back() 在list的末尾添加一个元素
16.push_front() 在list的头部添加一个元素
17.rbegin() 返回指向第一个元素的逆向迭代器

18.remove() 从list删除元素

语法:

void remove( const TYPE &val );
//删除链表中所有值为val的元素

19.remove_if() 按指定条件删除元素
20.rend() 指向list末尾的逆向迭代器

21.resize() 改变list的大小

语法:

void resize( size_type num, TYPE val );
//把list的大小改变到num。被加入的多余的元素都被赋值为val

22.reverse() 把list的元素倒转
23.size() 返回list中的元素个数

24.sort() 给list排序

语法:

void sort();//为链表排序,默认是升序
void sort( Comp compfunction );//采用指定函数compfunction来判定两个元素的大小。

25.splice() 合并两个list

语法:

void splice( iterator pos, list &lst );//把lst连接到pos的位置
void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上
void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定范围。

26.swap() 交换两个list

语法:

void swap( list &lst );// 交换lst和现链表中的元素

27.unique() 删除list中重复的元素

语法:

void unique();//删除链表中所有重复的元素
void unique( BinPred pr );// 指定pr,则使用pr来判定是否删除。

后续会继续推出Deque(双向队列)** 及 Maps 等库函数知识介绍**

创作不易,且行且珍惜,谢谢大家

目录
相关文章
|
3月前
|
算法 C++ 容器
C++标准库(速查)总结
C++标准库(速查)总结
96 6
|
4天前
|
JSON C++ 数据格式
C++20 高性能基础库--兰亭集库助力开发者构建高性能应用
这次分享的主题是《高性能基础库--兰亭集库助力开发者构建高性能应用》的实践经验。主要分为三个部分: 1. 业务背景 2. 雅兰亭库架构 3. 业务优化
|
16天前
|
XML 网络协议 API
超级好用的C++实用库之服务包装类
通过本文对Boost.Asio、gRPC和Poco三个超级好用的C++服务包装类库的详细介绍,开发者可以根据自己的需求选择合适的库来简化开发工作,提高代码的效率和可维护性。每个库都有其独特的优势和适用场景,合理使用这些库可以极大地提升C++开发的生产力。
36 11
|
22天前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
26 1
|
1月前
|
算法 C语言 C++
【c++丨STL】list的使用
本文介绍了STL容器`list`的使用方法及其主要功能。`list`是一种双向链表结构,适用于频繁的插入和删除操作。文章详细讲解了`list`的构造函数、析构函数、赋值重载、迭代器、容量接口、元素访问接口、增删查改操作以及一些特有的操作接口如`splice`、`remove_if`、`unique`、`merge`、`sort`和`reverse`。通过示例代码,读者可以更好地理解如何使用这些接口。最后,作者总结了`list`的特点和适用场景,并预告了后续关于`list`模拟实现的文章。
51 7
|
2月前
|
存储 编译器 C语言
【c++丨STL】vector的使用
本文介绍了C++ STL中的`vector`容器,包括其基本概念、主要接口及其使用方法。`vector`是一种动态数组,能够根据需要自动调整大小,提供了丰富的操作接口,如增删查改等。文章详细解释了`vector`的构造函数、赋值运算符、容量接口、迭代器接口、元素访问接口以及一些常用的增删操作函数。最后,还展示了如何使用`vector`创建字符串数组,体现了`vector`在实际编程中的灵活性和实用性。
96 4
|
2月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
101 5
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
78 2
|
2月前
|
存储 算法 Linux
【c++】STL简介
本文介绍了C++标准模板库(STL)的基本概念、组成部分及学习方法,强调了STL在提高编程效率和代码复用性方面的重要性。文章详细解析了STL的六大组件:容器、算法、迭代器、仿函数、配接器和空间配置器,并提出了学习STL的三个层次,旨在帮助读者深入理解和掌握STL。
82 0
|
1月前
|
存储 编译器 C语言
【c++丨STL】vector模拟实现
本文深入探讨了 `vector` 的底层实现原理,并尝试模拟实现其结构及常用接口。首先介绍了 `vector` 的底层是动态顺序表,使用三个迭代器(指针)来维护数组,分别为 `start`、`finish` 和 `end_of_storage`。接着详细讲解了如何实现 `vector` 的各种构造函数、析构函数、容量接口、迭代器接口、插入和删除操作等。最后提供了完整的模拟实现代码,帮助读者更好地理解和掌握 `vector` 的实现细节。
46 0