STL·笔记

发布时间 2023-07-22 16:17:00作者: 臧清宇

vector

基本操作

创建vector对象,vector<int> vec;

尾部插入数字:vec.push_back(a);

使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。

使用迭代器访问元素.

vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
    cout<<*it<<endl;

插入元素:    vec.insert(vec.begin()+i,a);在第i+1个元素前面插入a;

删除元素:    vec.erase(vec.begin()+2);删除第3个元素

vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

向量大小:vec.size();

清空:vec.clear();

queue

STL 中的 queue 容器提供了一众成员函数以供调用。其中较为常用的有:

queue<……> a;

元素访问

q.front() 返回队首元素

q.back() 返回队尾元素

修改

q.push() 在队尾插入元素

q.pop() 弹出队首元素

容量

q.empty() 队列是否为空

q.size() 返回队列中元素的数量

deque

1. 定义一个int类型的空双端队列 v0
deque<int> v0;
2. 定义一个int类型的双端队列 v1,并设置初始大小为10; 线性复杂度
deque<int> v1(10);
3. 定义一个int类型的双端队列 v2,并初始化为10个1; 线性复杂度
deque<int> v2(10, 1);
4. 复制已有的双端队列 v1; 线性复杂度
deque<int> v3(v1);
5. 创建一个v2的拷贝deque v4,其内容是v4[0]至v4[2]; 线性复杂度
deque<int> v4(v2.begin(), v2.begin() + 3);
6. 移动v2到新创建的deque v5,不发生拷贝; 常数复杂度; 需要 C++11
deque<int> v5(std::move(v2));

 

元素访问

q.front() 返回队首元素

q.back() 返回队尾元素

修改

q.push_back() 在队尾插入元素

q.pop_back() 弹出队尾元素

q.push_front() 在队首插入元素

q.pop_front() 弹出队首元素

q.insert() 在指定位置前插入元素(传入迭代器和元素)

q.erase() 删除指定位置的元素(传入迭代器)

容量

q.empty() 队列是否为空

q.size() 返回队列中元素的数量

priority_queue

priority_queue<int> q1;

// q1大根堆
priority_queue<int, std::vector<int> > q2;
priority_queue<int, std::deque<int>, std::greater<int> > q3;
// q3 为小根堆
for (int i = 1; i <= 5; i++) q1.push(i);
// q1 中元素 : [1, 2, 3, 4, 5]
std::cout << q1.top() << std::endl;
// 输出结果 : 5
q1.pop();
// 堆中元素 : [1, 2, 3, 4]
std::cout << q1.size() << std::endl;
// 输出结果 :4
for (int i = 1; i <= 5; i++) q3.push(i);
// q3 中元素 : [1, 2, 3, 4, 5]
std::cout << q3.top() << std::endl;
// 输出结果 : 1