容器

容器其实也就是数据结构,常用的容器有vector、list、deque、map、unordered_map_、_multimap、unordered_multimap、set、unordered_set、multiset、unordered_multiset、stack、queue、priority_queue、bitset、forward_list

vector是数组在内存中连续分配,list是链表,forward_list是单向队列,deque双端队列,priority_queue是优先队列,stack是栈

unordered前缀的容器是用hashtable实现的的,set、multiset、map、multimap是用红黑树实现的

biset是位图

string实际上是一种特殊的vector

常用容器操作

常用容器操作有增、删、改、查、排序、容量、取并、取差、取交、初始化、复制、赋值、遍历

vector

vector<int> a;

//增
a.push_back(2);
a.insert(iter, 2); //在迭代器之前添加元素

//删
a.pop_back(); //弹出最后添加进入元素
a.erase(iter); //删除由迭代器iter指定的元素,返回删除元素的下一个元素
a.clear(); //清空容器

//查
a.at(index); //返回由index指定的元素
a.front(); //返回头部元素
a.back(); //返回末尾元素

//属性
a.empty();
a.size();
a.capacity();
a.resize();
a.reserve();

list

list<int> a;

//增
a.push_back(2);
a.push_front

//删
a.pop_back(); //弹出头部元素
a.pop_front(); //弹出尾部元素
a.erase(iter); //删除由迭代器iter指定的元素,返回删除元素的下一个元素
a.remove(2); // 删除由值指定的元素
a.remove_if(func); //func返回bool,删除为真的元素 func可以为lambda表达式
a.remove_if([](int& num)->bool{return num%2==1;}); //删除所有奇数元素

//查
a.front();
a.back();


//属性
a.empty();
a.size();
a.resize();

//操作
a.unique();
a.sort(); //对list排序 a.sort(func) func返回bool,链表根据func的规则排序
a.sort([](int& num1, int& num2)->bool {return num1 >= num2 ? false : true; });
a.reverse(); //反转list

forward_list

deque

deque<int> a;

//增
a.push_back(2);
a.push_front(2);
a.insert(iter, 2); //在迭代器之前添加元素


//删
a.pop_back();
a.pop_front();
a.clear();
a.erase(iter); //删除由迭代器指定的元素

//查
a.at(index);
a.front();
a.back();
a[index];

//属性
a.size();
a.max_size();
a.resize();
a.emtpy();

stack

stack<int> a;

//增
a.push(2);

//删
a.pop(2);

//查
a.top();

//属性
a.size();
a.empty();

queue

queue<int> a;

//增
a.push(2);

//删
a.pop();

//查
a.front();
a.back();

//属性
a.empty();
a.size();

priority_queue

map、multimap

map<int, string> a;

//增
a.insert(std::pair<int, string>(2, string("abc")));
a.insert(iter, std::pair<int, string>(2, string("abc"))); //在iter之前插入pair
//删
a.erase(key);
a.clear();

//查
a.at(key); //若key不存在,则抛出out of range exception
a[key]; //若key不存在则自动添加新的pair

//属性
a.empty();
a.size();
a.max_size();

//操作
a.find(key); //返回找到元素的iter
a.count(key); //返回key为key的数量,一般用于multimap
a.lower_bound(key); //返回小于等于key的所有pair中最大的迭代器
a.upper_bound(key); //返回大于key的第一个pair迭代器

unorder_map、unordered_multimap

unordered_map<int, string> a;

//增
a.insert(std::pair<int, string>(2, string("abc")));

//删
a.erase(key);
a.clear();

//查
a.at(key); //若key不存在,则抛出out of range exception
a[key]; //若key不存在则自动添加新的pair

//属性
a.empty();
a.size();
a.max_size();

//操作
a.find(key); //返回找到元素的iter
a.count(key); //返回key为key的数量,一般用于multimap

set、unordered_set

set<int> a;
//增
a.insert(value);

//删
a.clear();
a.erase(value); //删除value元素
a.erase(iter); //删除由iter指向的元素

//查
a.find(key); //返回指向key元素的迭代器
a.count(key); //multiset,一般用于multiset

//属性
a.empty();
a.size();
a.max_size();

biset

bitset<4> a;

//查
a[0]

//改
a.set(3,1);
a.reset
a.filp()

//属性
a.count();
a.size();
a.any();
a.none();
a.all();

//操作

tuple

tuple<int, int, int> a(1,2,3);

//获取元组分量
std::get<0>(a);
std::get<1>(b);
std::get<2>(c);

//获取元组分量个数
std::tuple_size<decltype(a)>::value

算法

查询类

find、find_if、find_first_of、find_end、all_of、any_of、none_of、max_element、min_element、search、mismatch

属性类

count、count_if、is_sorted、is_partitioned、

多容器类

is_permutation、equal、includes

替换

replace、replace_if

填充

fill

转换

transform

复制

copy

移动

move

容器运算

set_union、set\_intersection、set_difference、set_symmetric_difference\

merge

排序

sort、stable_sort

分割

partition、paritioncopy、stable_partition

唯一

unique

旋转

rotate

反转

reverse

洗牌

random_shuffle

results matching ""

    No results matching ""