目录
1.STL了解
1.概念
STL(Standard Template Library)是 C++ 标准库的核心,通过泛型编程提供通用、高效的数据结构和算法。
2.三大组件
1.容器(Containers):存储数据的模板类,分为序列容器,关联容器和容器适配器.
2.算法(Algorithms):操作数据的模板函数,与容器无关.
3.迭代器(Iterators):泛型指针,连接容器与算法.
3.主要作用
1.直接用现成的工具,不用自己手动实现复杂的数据结构,可以专注于算法设计.
2.算法库可以直接调用,不容易翻车而且时间复杂度有确切的保证.
4.万能头文件
#include<bits/stdc++.h>
比较耗时,可以加快输入输出速度
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
2.Vector(动态数组)
1.头文件
#include<vector>
2.初始化
#include<vector>
#include<algorithm>
vector<int> a;//表示空构建,不进行数据填充
vector<int>b(5, 0);//容器b中包含五个元素并且他们的值都是0 先声明的是容量
vector<int>h(5);//初始化五个大小 默认都为0
vector<int>k({1,2,3})//用于具体填充各个数据时,此时小括号和等于号的效用是一样的
vector<int>[200];//二维数组 记住200表示的是外层是200个vector
vector<vector<int>>arr;//二维数组
struct tac {
int c;
string d;
};
vector<tac>h;//结构体容器
vector<int>a(b.begin(),b.begin+3);//把b动态数组中的前三个数据赋值过来
//记得迭代器要多往后一位 (左闭右开区间)
int b[7]={1,2,3,4,5,6,7};
vector<int> a(b,b+7);//获取数组中的数据的时候,不要忘记数组名本身代表的就是第一个数据的地址
//而且同样是左闭右开区间
for(auto x : a) {//遍历输出
cout << x << " ";
}
3.获取长度
vec.size();
4.改变数组大小
vector<int> vec({0,1,2,3,4,5});
vec.resize(2);//变成{0,1}
5.检查容器是否为空
bool check=vec.empty();//空则返回true 否则false
6.清空容器
vec.clear();
也可以用erase函数进行特定元素数据的删除
时间复杂度O(n) 这里的n指的是删除元素后的元素数量 因为需要底层需要动态维护到前面(保证内存的连续性) 对n个数据进行操作
a.erase(it)//从a中删除迭代器it指定的元素,p必须指向c中的一个真实元素,不能是最后一个元素end()
a.erase(b,e)//从a中删除迭代器对b和e所表示的范围中的元素,返回e
要注意函数处理的参数是迭代器
for (auto it = v.begin(); it != v.end();) {
if (*it == 3) {
it = v.erase(it); // 必须接收erase的返回值!
} else {
++it;
}
}
迭代器失效:原本指向的元素内存位置被移动或者删除了导致无法在该位置匹配,所以失效
所以删除之后要立马记得更新迭代器 ,删除之后返回的迭代器位置是原本删除位置的下一位
7.迭代器相关
vector<int>::iterator it;//迭代器声明 不专属于具体的某个容器
//使用作用域解析符 因为本质是vector类模板中的一部分
vec.begin();//指向第一个元素
vec.end();//指向最后一个元素的下一位
for (vector<int>::iterator it = a.begin();it != a.end();it++) {
cout << *it << ' ';
cout << endl;
}//一种遍历方式
for(auto &element:vec){
}//另一种遍历方式
这里同样可以顺带熟悉一个函数reverse(翻转) O(n)
vector<int> a={1,2,3,4,5};
reverse(a.begin(),a.end());//a的值为5,4,3,2,1 倒置
8.快速取双端元素
vec.front();//取最前面元素值
vec.back();//取最后面元素值
9.双端动态处理数组
vec.push_back(a);//往末尾添加元素a
vec.pop_back();//删除末尾元素
//没有push_front()这个是双端队列deque的库函数
//因为这个本质上会把数据都向后移一位 时间复杂度太高
O(1)
当然这里也可以用insert函数进行操作
// 初始化vector
//记住前面的参数表示的是插入位置
vector<int> vec = {2, 3, 4};
// 1. 在最前端插入元素
vec.insert(vec.begin(), 1); // vec = {1, 2, 3, 4}
// 2. 在指定位置(第3个元素前)插入单个元素
vec.insert(vec.begin() + 2, 5); // vec = {1, 2, 5, 3, 4}
// 3. 插入多个相同元素
vec.insert(vec.

最低0.47元/天 解锁文章
4806

被折叠的 条评论
为什么被折叠?



