C++ STL应用(持续更新……)
C++ STL 与ACM竞赛相关的应用
- 1、vector
vector是动态数组,可以理解为是能够根据需要随时申请内存的动态数组。
常用操作如下:
容量
vec.size() 向量大小
vec.empty() 向量判空 (如果为空true、不为空false)
修改
vec.push_back() 向向量末尾添加一个元素
vec.pop_back() 删除向量末尾元素
vec.insert() 向向量中任意位置插入元素
vec.erase() 删除任意位置元素
vec.swap(,) 交换任意两个位置的向量
vec.clear() 清空向量元素
迭代器
vec.begin() 开始指针
vec.end() 末尾指针
元素访问
vec[1],vec[2] 下标直接访问
vec.front() 访问第一个元素
vec.back() 访问最后一个元素
示例:
#include <bits/stdc++.h> using namespace std; vector<int>v;///声明部分 int main() { v.push_back(9); v.push_back(7); v.push_back(4); v.push_back(3); v.push_back(2); v.push_back(1); v.push_back(3);///插入元素 if(!v.empty())///判断是否为空 { v.pop_back();///3 出 v.pop_back();///1 出 v.pop_back();///2 出 } ///迭代器的用法 vector <int> :: iterator it; for(it=v.begin();it != v.end(); it++)///遍历元素 { cout<<*it<<endl; } v.insert(it,4,0);///vector 后面会输出 4个0 ///插入的位置取决于指针的位置 for(it=v.begin();it != v.end(); it++)///遍历元素 { cout<<*it<<endl; } }
2、set和multiset
set顾名思义就是集合,里面没有重复的元素;但multiset可以有重复的元素,并且能够自动的从小到大排序
常用操作如下:
大小、判空
s.size() 返回元素个数
s.empty() 判断是否为空
增加、删除函数
s.insert() 向集合内插入元素
s.erase() 删除集合内有确定值的元素
迭代器
iterator insert(iterator it,x):在迭代器it处插入元素x
iterator erase(iterator it):删除迭代器指针it处元素
iterator erase(iterator first,iterator last):删除[first, last)之间元素
iterator begin():返回首元素的迭代器指针
iterator end():返回尾元素的迭代器指针
reverse_iterator rbegin():返回尾元素的逆向迭代器指针 (即最后一个)
reverse_iterator rend():返回首元素前一个位置的迭代器指针
示例
为了更好的展示STL中的这个功能,我打算在这里放一道题
UVa 11136
题目大意:超市抽奖,找到每天消费最多的和消费最少的,拿出来给他们奖励,奖励就是消费之差。
下面是代码
复制代码 #include <bits/stdc++.h> using namespace std; int main() { long long maxx,minn,sum; ///根据题目要求要用long long int k,p,q; multiset<int >s; int n; while(scanf("%d",&n) && n) { sum=0; s.clear();///在一次开始之前需要清空multiset cin>>k; while(k--) { cin>>p; for(int i=0;i<p;i++) { cin>>q; s.insert(q);///multiset的插入操作 } ///multiset 自动排序 minn=*(s.begin()); ///找到最小的(可以重复) maxx=*(s.rbegin()); ///反序查找第一个,也就是最后一个 ///s.end() 表示的是最后一个的下一个 sum+= maxx-minn; s.erase(s.find(maxx)); ///s.erase() 括号里面若是值,会把所有相同重复的都删掉 s.erase(s.find(minn)); ///s.find () 若有,只返回一个值 } cout<<sum<<endl; } }
3、priority_queue()优先队列
priority_queue<int> p;
从小到大输出
priority_queue<int, vector<int> , greater<int> >p;
从大到小输出
priority_queue<int,vector<int> , less<int> >p;
完整代码
#include<iostream> #include<queue> using namespace std; int main(){ priority_queue<int, vector<int>, less<int> >p; p.push(1); p.push(2); p.push(8); p.push(5); p.push(43); for(int i=0;i<5;i++){ cout<<p.top()<<endl; p.pop(); } return 0; }
- C++学习STL之顺序容器(持续更新)
- 记录 C++ STL 中 一些好用的函数--持续更新 (for_each,transform,count_if,find_if)
- C++技巧之STL(持续更新)
- [FAQ].C/C++ (持续更新)
- 【C++ STL应用与实现】18: 如何使用迭代器适配器
- 2015-2016机器人操作系统(ROS)及其应用暑期学校资料汇总 ROS Summer School 持续更新
- C++ STL 基础及应用(3) 迭代器
- Knockout应用开发指南 持续更新中
- JQuery应用笔记【持续更新】
- C++中的结构体的学习使用(持续更新中)
- jquery的应用(持续更新……)
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)
- C++ STL-stack栈的应用
- 全面解析hash函数的各种应用(持续更新)
- 【C++ STL应用与实现】86: 如何使用std::accumulate
- C++笔试题(1),持续更新中……
- C++ STL 基础及应用(6) 容器
- 【C++ STL应用与实现】56: 使用std::unique删除重复元素
- iOS7.1 SDK对应用造成的影响【汇总持续更新】
- 2015-2017机器人操作系统(ROS)及其应用暑期学校资料汇总 ROS Summer School 持续更新