学习笔记N-028
C++STL容器和算法
- 更新
- 内容块
- 55
- 阅读
- 约 3 分钟
- 路径
- 学习笔记 / C++
sort排序
accumulate求和求积,字符串拼接
include <iostream>
include <vector>
include <numeric>
int main() {
std::vector<int> v = {1, 2, 3, 4};
int sum = std::accumulate(v.begin(), v.end(), 0); // 1+2+3+4 = 10,第三个模板参数传入 0,相当于从 0 开始加
int product = std::accumulate(v.begin(), v.end(), 1, std::multiplies<int>()); // 1*1*2*3*4 = 24
std::cout << sum << ", " << product;
}std::vector<std::string> words = {"Hello", " ", "world", "!"};
std::string sentence = std::accumulate(words.begin(), words.end(), std::string("Result: "));
// "Result: Hello world!"nth_element将第n小的元素放到它的对应位置
lower_bound查找大于等于目标的迭代器
next_permutation有序数组全排列
unique剪切原数组相邻相同元素并把其放在数组末尾,配合sort和erase使用,unique返回的是排序后的最后一位(max)的迭代器,可以用erase删除这一位到vec.end()
min/max_element查找范围内最小,最大元素,解引用后输出
accumulate累加,自定义累计算,匿名函数

vector:push_back在容器尾部插入/emplace_back在容器尾部构造/pop_back删除容器尾部一个元素/insert指定位置插入/erase指定位置删除
queue:push尾部插入/emplace尾部构造/front返回队首元素引用/empty判断是否为空/size个数/pop删除
stack:push压栈,尾部插入/emplace栈顶构造/top返回栈顶引用/empty判断是否为空/size大小/pop删除栈顶元素
deque:push_back/emplace_back/pop_back/push_front头插入/insert/erase/operator[]随机访问/empty/size
priority_queue优先队列,堆:pop/top

decltype获取匿名函数的类型

set集合有序唯一/insert/erase/find/count统计当前集合中为某个值的个数/底层为红黑树
multiset有序不唯一,有特殊性质,红黑树
unordered_set 无序唯一,底层为哈希表
set作用:



上面第三张图中在删除单个元素时要判断这个元素是否存在,不然如果这个元素不在还删除的话会报错,但是问题出在的是find,而不是删除。
erase➕find是删除一个为n的元素
erase n是删除所有的n元素
multiset<int> s;
s.erase(s.find(数组名[index]);
s.erase(s.find(值);关于unordered_set 的未知区域
1.

比较了两次的哈希值是一样的,所以直接去重,unordered_set直接拒绝了第二次emplace的插入
2.

计算后的结果是2,0.1+0.2!=0.3,存在误差
想忽略误差,使他们相等,就得使用“1.”中的自定义方法
消除误差:

map:map中的每一个元素都是像pair中的一样的键值对(key,value)
Multimap
unordered_map
unordered_multimap

默认按照key字典序输出(abcd——)
可通过下标运算符“图名["key"]”找出对应的value,如果key是不存在的,值为0
下标取值会影响“图名.size”的值,原理是在通过下标运算符查找时,如果没有查找到这个key,那么就插入一个键值对,值为0。

用下标取值等于这个get函数,第一行string前补一个const
可在cppreference.com中查找更多算法
今天做这个总结连入门都不算,之后再来丰富文档内容(做题,学习原理之后)
