vector类

声明和初始化

常用声明方法

vector<int > a;        //简单声明
vector<int > a(10);    //初始化大小为10的一维vector
vector<int > a(10,1); //初始化大小是10的全1vector

int n[] = {1,2,3,4,5};
vector<int >a(&n[0],&n[4]);    //把数组当成内容
vector<int >b (a.begin(),a[6]);

遍历

// 方法1

a.size()=n
for(int i=0;i<n;i++){
    pass;
}

// 方法2

vector<int >::iterator it;
for(it = a.begin();it!=a.end();it++){
    pass;
}

插入元素

// 插入末尾
a.push_back(12);

//插入列表中
a.insert(iterator, value);

快速获得两端元素

快速获得首元素:

a.front(); //返回的是值,不是迭代器

快速获得最后一个元素:

a.back(); //这个返回的是值,不是迭代器

删除元素

// 删除末尾元素
a. pop_back();

//删除指定位置元素
a.erase(iterator);

//删除指定区域的元素
a.erase(start_iterator, end_iterator);    // 注意左闭右开原则

查找元素

auto it = find(a.begin(),a.end(),value)

// 如果查找不到,it=a.end()

二维数组

//第一种方法:完全动态
vector<vector<int> > a;

//第二种方法:行动态,列固定
vecotr<int > a[n];

lower_bound()和upper_bound()

查询关键词的下界和上界

//返回下届,指的是该元素第一次的出现位置
auto it = lower_bound(a.begin(),a.end(),key);

//返回上界,指该元素最后一次出现的位置+1
auto it = upper_bound(a.begin(),a.end(),key);

//如果该元素不存在,则返回a.end()

Map类

能用就行,查询有优化

声明

map<int ,int > a;

插入数据

//第一种:最基本的插入,同时可以实现修改
a[999] = 1;

//插入pair
pair node = make_pair(1,1);
a.insert(node);
//如果插入失败会返回一个pair,第二个值表示是否插入成功

遍历

map<int, int>::iterator it;
for(it = a.begin();it!=a.end();i++){
    pass;
}

//记住it是个迭代器,用的时候要像这样子写,并且键值不能修改
*it.second
*it->second

查找是否存在

//使用find函数,这个find函数已经被map重写,使用红黑树查询
//map中只能查询是否存在该键值!
auto it = a.find(key);
// 如果不存在it = a.end();

//第二种方法
int ans = count(key);
// 返回值只有0和1,查询键值是否出现过

删除元素

//erase
auto it = find(a.begin(),a.end(),key);
a.erase(it);

//erase删除一片
auto it = upper_bound(a.begin(),a.end(),key);
a.erase(it,a.end());

SET类

声明

set<int> a;

插入

a.inset(key);

删除

//erase单独值
a.erase(key);

//erase迭代器
a.erase(a.begin());

//erase区间
auto it = a.find(3);
a.erase(it,a.end());

查询

//使用find函数,这个find函数已经被map重写,使用红黑树查询
//map中只能查询是否存在该键值!
auto it = a.find(key);
// 如果不存在it = a.end();

//第二种方法
int ans = count(key);
// 返回值只有0和1,查询键值是否出现过

遍历

等同于上面

数学运算

储存结果的set

#include<algorithm>

set<int > res;

并集

set_union(a.begin(),a.end(),b.begin(),b,end(),inserter(res,res.begin()));

交集

set_intersection(a.begin(),a.end(),b.begin(),b,end(),inserter(res,res.begin());

差集

set_difference(a.begin(),a.end(),b.begin(),b,end(),inserter(res,res.begin()));