C++ STL

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 {

//找到

}
阅读更多

扫码向博主提问

千叶正志

非学,无以致疑;非问,无以广识
去开通我的Chat快问
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nghuyong/article/details/73692534
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭