C++ STL

来源:互联网 发布:淘宝怎么输入口令 编辑:程序博客网 时间:2024/06/03 22:08

STL是C++中的标准模板库。包括了常见的算法和数据结构。在OJ中广泛使用。本文是对STL的一个整理。

排序

  • 头文件< algorithm >
  • 基本用法:sort函数 sort(a,a+n),左闭右开的区间

二分查找

  • 头文件< algorithm >
  • 调用lower_bound(a,a+n,value)-a;
  • 真实范围是在a到a+n-1,左闭右开的区间,寻找大于或等于value的第一个下标位置。
  • upper_bound(),是返回第一个大于value的下标位置。
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;int main(){    int a[5]={3,4,4,6,8};    int *temp_a = a;    int *lower_p = lower_bound(a,a+5,4); //返回的是第一个大于等于4的位置指针    int lower_position = lower_p-a;    int *upper_p = upper_bound(a,a+5,4); //返回的是第一个大于4的位置指针    int upper_position = upper_p-a;    int p1 = lower_bound(a,a+5,2)-a; //最小的情况    int p2 = lower_bound(a,a+5,10)-a; // 最大的情况

这里写图片描述

Vector

vector就是一个不定长数组。不仅如此,它把一些常用操作“封装”在了vector类型内部。
- 头文件< vector>
常见操作:
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.push_back(elem) 在尾部加入一个数据。
c.pop_back() 删除最后一个数据。
c.size() 回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器

Set

Set是数学上的集合,每个元素最多出现一次
自定义类型也可以构造set,但必须定义了“小于”运算符
构造set集合主要目的是为了快速检索,不可直接去修改键值。
常用操作:
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。

set<int> s;s.erase(2);        //删除键值为2的元素s.clear();

4.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。

set<int> s;set<int>::iterator it;it=s.find(5);    //查找键值为5的元素if(it!=s.end())    //找到    cout<<*it<<endl;else            //未找到    cout<<"未找到";

Map

map就是从键(key)到值(value)的映射。因为重载了[]运算符,map像是数组的“高级版”。
例如可以用一个map< string,int>month_name来表示“月份名字到月份编号”的映射,
然后用month_name[“July”]=7这样的方式来赋值。

1 头文件
#include < map>

2 定义
map< string, int> my_Map;

3 插入数据
(1) my_Map[“a”] = 1;

4 查找数据

int nFindKey = 2; //要查找的Key//定义一个条目变量(实际是指针)UDT_MAP_INT_CSTRING::iterator it= enumMap.find(nFindKey);if(it == enumMap.end()) {//没找到}else {//找到}
原创粉丝点击