目录
1.STL(Containers)简介
2.STL容器
1.vector
1.1vector的定义方式
1.2vector的操作和遍历
2.deque
2.1deque操作方式
3.map
3.1map简介
3.2map定义
3.3map操作
4.栈
4.1栈的定义
4.2栈的函数
3.总结
STL(Standard Template Library)是C++标准库中的一个重要组成部分,它提供了一系列的模板类和函数,用于实现常用的数据结构和算法。STL的设计目标是提供高效、可复用的数据结构和算法,以便开发人员能够更加方便地进行软件开发。
STL主要包含以下几个组件:
容器(Containers):STL提供了多种容器,如vector、list、deque、set、map等。这些容器提供了不同的数据结构,以满足不同的需求。例如,vector是一个动态数组,list是一个双向链表,set是一个集合,map是一个键值对的映射。
迭代器(Iterators):迭代器是STL中用于遍历容器元素的一种抽象概念。通过使用迭代器,我们可以方便地对容器中的元素进行访问和操作。STL提供了多种类型的迭代器,如输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。
算法(Algorithms):STL提供了大量的算法,如排序、查找、复制、删除、替换等。这些算法可以直接应用于STL容器,也可以应用于普通的数组或其他容器。使用STL算法可以大大简化代码的编写,并提高代码的可读性和可维护性。
函数对象(Function Objects):函数对象是一种可调用的对象,它可以像函数一样被调用。STL中的很多算法都可以接受函数对象作为参数,以实现不同的操作。STL提供了一些内置的函数对象,如加法、减法、乘法、除法等,同时也支持用户自定义的函数对象。
适配器(Adapters):适配器是一种特殊的容器或迭代器,可以改变容器或迭代器的接口,以适应不同的需求。STL提供了多种适配器,如栈(stack)、队列(queue)、优先队列(priority_queue)等。
vector底层本质就是一个顺序表,它是一个可变长的数组,采用连续存储的空间来存储数据,它的元素类型也可以是任意的内置类型或者自定义类型。
1.定义一个任意类型的空的vector
vector abc;
用法:关键字vector+<定义类型>+空格+名称
2.定义一个任意类型的vector,并用n个val来初始化vector
vector a1(10, 5);// 用10个5来初始化vector
用法:关键字vector+<定义类型>+空格+名称+定义
3.定义一个任意类型的vector,并用迭代器区间来初始化vector
vector v5(v4.begin(), v4.end());// 用v4的迭代器区间来初始化v5
string s("hello world");
vector v6(s.begin(), s.end());// 用s的迭代器区间来初始化v6
用法:关键字vector+<定义类型>+空格+名称+变量-区间
v.capacity(); //容器容量
v.size(); //容器大小
v.at(int idx); //用法和[]运算符相同
v.push_back(); //尾部插入
v.pop_back(); //尾部删除
v.front(); //获取头部元素
v.back(); //获取尾部元素
v.begin(); //头元素的迭代器
v.end(); //尾部元素的迭代器
v.insert(pos,elem); //pos是vector的插入元素的位置
v.insert(pos, n, elem) //在位置pos上插入n个元素elem
v.insert(pos, begin, end);
v.erase(pos); //移除pos位置上的元素,返回下一个数据的位置
v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置
vector类似于数组,可以直接下标遍历
#include
#include
#include
using namespace std;
int main()
{
vector v(10, 10);
for (size_t i = 0; i < v.size(); i++)
{
v[i] += i;
cout << v[i] << " ";
}
cout << endl;
return 0;
}
deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。
(1) 构造函数
deque():创建一个空deque
deque(int nSize):创建一个deque,元素个数为nSize
deque(int nSize,const T& t):创建一个deque,元素个数为nSize,且值均为t
deque(const deque &):复制构造函数
(2) 增加函数
void push_front(const T& x):双端队列头部增加一个元素X
void push_back(const T& x):双端队列尾部增加一个元素x
iterator insert(iterator it,const T& x):双端队列中某一元素前增加一个元素x
void insert(iterator it,int n,const T& x):双端队列中某一元素前增加n个相同的元素x
void insert(iterator it,const_iterator first,const_iteratorlast):双端队列中某一元素前插入另一个相同类型向量的[forst,last)间的数据
(3) 删除函数
Iterator erase(iterator it):删除双端队列中的某一个元素
Iterator erase(iterator first,iterator last):删除双端队列中[first,last)中的元素
void pop_front():删除双端队列中最前一个元素
void pop_back():删除双端队列中最后一个元素
void clear():清空双端队列中最后一个元素
(4) 遍历函数
reference at(int pos):返回pos位置元素的引用
reference front():返回首元素的引用
reference back():返回尾元素的引用
iterator begin():返回向量头指针,指向第一个元素
iterator end():返回指向向量中最后一个元素下一个元素的指针(不包含在向量中)
reverse_iterator rbegin():反向迭代器,指向最后一个元素
reverse_iterator rend():反向迭代器,指向第一个元素的前一个元素
(5) 判断函数
bool empty() const:向量是否为空,若true,则向量中无元素
(6) 大小函数
Int size() const:返回向量中元素的个数
int max_size() const:返回最大可允许的双端对了元素数量值
(7) 其他函数
void swap(deque&):交换两个同类型向量的数据
void assign(int n,const T& x):向量中第n个元素的值设置为x
deque是“double-ended queue”的缩写,和vector一样都是STL的容器,唯一不同的是:
deque是双端数组,而vector是单端的。或者说deque是双链表,而vector是单链表
deque和vector定义和调用相差不多,如
deque deqInt; //存放int的deque容器。
deque deqFloat; //存放float的deque容器。
deque deqStu; //存放student的deque容器。
C++中的map是一种关联容器,它提供了一种将键和值进行映射的方式。每个键都是唯一的,而值可以重复。map内部使用红黑树实现,因此它具有自动排序的特性。以下是一个简单的示例来介绍C++中的map:
#include
#include
输出
Value at key 2: banana
Key: 1, Value: apple
Key: 2, Value: banana
Key: 3, Value: orange
map<类型,类型> 名字;
map关键字+<类型(键值)+类型(键值对应)> +名字
定义:名称["键值"]="键值对应"
引用:名称["键值"]==键值对应
列如:
#include
stack<类型(可以不写)> 名字; 或者stack 名字;
.empty() | 判断栈是否为空,空则返回true |
.pop() | 移除栈顶元素 |
.push(名字(或字符串)) | 在栈顶增加元素 |
.size() | 返回栈中元素数目 |
.top() | 返回栈顶元素 |
通过使用STL,我们可以更加高效地开发C++程序。STL提供了丰富的数据结构和算法,可以大大减少代码的编写量,并提高代码的可读性和可维护性。同时,STL还具有良好的性能和可移植性,可以在不同的平台上进行开发和运行。
总结起来,STL是C++标准库中的一个重要组成部分,它提供了丰富的数据结构和算法,以及方便的容器、迭代器、算法、函数对象和适配器等组件。通过使用STL,我们可以更加高效地开发C++程序,并提高代码的可读性和可维护性。
(借鉴 C++STL容器总结_c++stl容器的特点-CSDN博客 C++关于vector的详细介绍_c++ vector-CSDN博客C++STL容器总结_c++stl容器的特点-CSDN博客 C++中deque用法详解_deque c++ 使用-CSDN博客
C++容器详解之deque_c++ deque-CSDN博客
c++STL库最详细介绍(保姆级教学)-CSDN博客)