STL常用总结

为什么要用STL,STL的好处?
STL是一个打包了数据结构的函数库,STL的所有对象都没必要提前分配内存大小,它会根据对象存取数据的大小来分配空间大小(系统自动扩张)

1.vector(向量)(底层是数组)
向量没有确定数据类型所以向量可以是多种数据类型,但是注意一个向量对象只能有一种数据类型,可以构造二维向量(二维数组)比如二维整型向量vector<vector> 值得注意的是二维向量的大元素和小元素(行元素和最小元素)都是一个向量可以不分配大小而是通过数据的规模分配大小

这里介绍整型向量的常用方法函数(其他类型的可以自行通过转换类型达到相同的效果):

vector a(10); //定义了10个整型元素的向量
vector a(10,1); //定义了10个整型元素的向量,且给出每个元素的初值为1
vector a(b); //用b向量来创建a向量,整体复制性赋值
vector a(b.begin(),b.begin+3); //定义了a值为b中第0个到第2个(共3个)元素
a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a
a.assign(4,2); //是a只含4个元素,且每个元素为2
a.back(); //返回a的最后一个元素
a.front(); //返回a的第一个元素
a.clear(); //清空a中的元素
a.empty(); //判断a是否为空,空则返回ture,不空则返回false
a.pop_back(); //删除a向量的最后一个元素
a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素
a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5
a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5
a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5
a.size(); //返回a中元素的个数;
a.capacity(); //返回a在内存中总共可以容纳的元素个数
a.swap(b); //b为向量,将a中的元素和b中的元素进行整体性交换

vector的find函数是一个比较特殊的函数他的返回值必须用迭代器接收
迭代器即为一个存储某个值在向量中的地址 整型迭代器的定义方式:vector::iterator 可以接收vector的元素的地址
vector的find函数: vector::iterator it; it=find(a.begin(),a.end(),int) 其中a为vector的对象
此时为查找a开头到结尾是否有这个值,如果没有就会返回a.end().
如果需要查找vector其中一个元素的下标是多少那么就用it-a.begin()即可求出下标

2.string(字符串)

字符串也能根据其值的大小来自动分配空间,相当于字符数组但是不需要提前分配空间
string 可用+直接连接字符串
这里介绍string的常用函数:

string str; //定义了一个空字符串str
s

### 常用STL容器与算法总结 #### 容器概述 C++标准模板库(STL)中的容器是用来存储数据的对象集合。这些容器提供了不同的特性来满足不同场景下的需求。常见的容器包括序列式容器和关联式容器。 - **序列式容器**:用于按顺序存储元素,支持随机访问或线性访问。 - `std::vector`:动态数组,允许快速随机访问[^3]。 - `std::deque`:双端队列,两端都可以高效插入和删除。 - `std::list`:双向链表,适合频繁的插入和删除操作[^2]。 - **关联式容器**:基于键值对存储元素,提供高效的查找能力。 - `std::set` 和 `std::multiset`:无序集合并允许多次重复项。 - `std::map` 和 `std::multimap`:有序映射并允许多次重复键值对。 - `std::unordered_set`, `std::unordered_map`: 使用哈希表实现的无序集合和映射[^4]。 #### 迭代器 迭代器是STL的核心概念之一,它充当了连接容器和算法之间的桥梁。通过迭代器,可以遍历容器内的元素而无需关心底层实现细节。主要有五种类型的迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器以及随机访问迭代器。 #### 算法分类 STL还定义了一系列通用算法,它们独立于具体的容器类型工作。以下是部分重要算法: - **非修改型算法** - `std::find`:在一个范围内寻找特定值的位置。 - `std::count`:统计某个范围中指定值的数量。 - **修改型算法** - `std::sort`:对给定区间进行排序[^1]。 - `std::transform`:应用函数到一个范围并将结果保存至另一个位置。 - **数值计算相关算法** - `std::accumulate`:累加一系列数值得总和。 下面是一个简单的例子展示如何利用STL完成一些基本任务: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {5, 2, 9, 1}; // 排序 std::sort(numbers.begin(), numbers.end()); // 查找第一个大于等于3的元素 auto it = std::lower_bound(numbers.begin(), numbers.end(), 3); if (it != numbers.end()) { std::cout << "First element >=3 is: " << *it << '\n'; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值