STL容器自用
作者:
叙利亚悍匪_0
,
2024-02-05 16:11:50
,
所有人可见
,
阅读 38
/* vector基本用法
vector 变长数组 倍增的思想
size() 放回元素个数
empty() 返回是否为空
clear() 清空数组
front()/back() 返回第一个数/最后一个数
push_back/pop_back() 尾插一个数/尾删一个数
begin()/end() 迭代器 指向第0个数/指向最后一个数的后一个数
支持随机寻址[]
vector支持比较运算 比较字典序 */
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> a;
for(int i = 0;i<10;i++) a.push_back(i);
//第一种遍历方式 利用随机寻址
for(int i = 0;i<a.size();i++) cout<<a[i]<<' ';
cout<<endl;
//第二种遍历方式 利用vector的迭代器遍历
for(vector<int>::iterator i = a.begin();i != a.end();i++) cout<<*i<<' ';
// for(auto i = a.begin();i != a.end();i++)
cout<<endl;
//第三种遍历方式 利用c++的范围遍历
for(auto x: a) cout<<x<<" ";
cout<<endl;
vector<int> x(4,3),y(3,4);
if(x<y) cout<<"x<y"<<endl;
}
/* pair的用法
pair<int,int>
first, 第一个元素
second,第二个元素
支持比较运算,以first为第一关键字,以second为第二关键字(字典序) */
#include<iostream>
using namespace std;
#include<cstring>
#include<string.h>
int main()
{
pair<int,string>p;
p = make_pair(123,"gdp");
p = {123,"g123"};
cout<<p.first<<' '<<p.second<<endl;
}
/* string的用法
string 字符串
size()
empty()
clear()
substr(int x,int y)
返回一个字串 第一个参数 x表示子串起始位置 第二个参数 y表示子串长度,不写第二参数返回到结尾
c_str() 返回字符串第一个元素地址 可以用printf("%s",a.c_str()); */
#include<iostream>
using namespace std;
#include<cstring>
int main()
{
string a = "gdp";
//string支持字符串+号拼接
a += "nb";
a += '6';
cout<<a<<endl;
//substr
cout<<a.substr(1,3)<<endl;
//c_str
printf("%s\n",a.c_str());
return 0;
}
/* queue,队列
size()
empty()
push() 向队尾插入一个元素
front() 返回队头元素
back() 返回队尾元素
pop() 弹出队头元素
queue没有clear()函数*/
#include<iostream>
using namespace std;
#include<cstring>
#include<queue>
int main()
{
queue<int> q;
for(int i = 0;i<10;i++) q.push(i);
cout<<q.front()<<endl;
cout<<q.back()<<endl;
q.pop();
cout<<q.front()<<endl;
cout<<q.back()<<endl;
}
/* priority_queue 优先队列(堆) 默认大根堆
push() 插入一个元素(并且重新键堆)
top() 返回堆顶元素
pop() 弹出堆顶元素
因为默认为大根堆 如果想要建小根堆可以插入负数,就可以建一个小根堆
*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int main()
{
priority_queue<int> heap;
for(int i =0;i<10;i++) heap.push(-i);
cout<<heap.size()<<endl;
for(int i =0;i<10;i++)
{
cout<<abs(heap.top())<<endl;
heap.pop();
}
return 0;
}
/* stack, 栈
size()
empty()
push() 向栈顶插入一个元素
top() 返回栈顶元素
pop() 弹出栈顶元素*/
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
for(int i = 0;i<10;i++) s.push(i);
for(int i = 0;i<10;i++)
{
printf("%d ",s.top());
s.pop();
}
return 0;
}
/* deque 双端队列 可以看作功能加强版 vector 但效率十分差 所以使用较少
size() 放回元素个数
empty() 返回是否为空
clear() 清空数组
front()/back() 返回第一个数/最后一个数
push_back/pop_back() 尾插一个数/尾删一个数
push_front()/pop_front() 头插/头删
begin()/end()
支持随机寻址[]
*/
/*
set(不能有重复元素) multiset(可以有重复元素)
insert() 插入一个数
find() 查找一个数 存在返回该数 不存在返回元素个数
count() 返回某一个数的个数
erase() 删除所有X
lower_bound(x) 最大下界 返回大于等于x的最小的数的迭代器
upper_bound(x) 最小上界 返回大于x的最小的数的迭代器
*/
/*
map
insert() 插入的数一个pair 相当于把第一个数映射成第二个数
erase() 删除的是pair或者迭代器
find()
[] O(logn);
lower_bound/ upper_bound;
int main()
{
map<string,int> a;
a["asd"] = 1;
a["asdasd"] = 2;
cout<<a["asd"]<<endl;
cout<<a["asdasd"]<<endl;
}
*/