项目空间

学习笔记N-028

C++STL容器和算法

更新
内容块
55
阅读
约 3 分钟
路径
学习笔记 / C++

sort排序

accumulate求和求积,字符串拼接

代码块C++
#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;
}
代码块C++
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累加,自定义累计算,匿名函数

C++STL容器和算法 · 图 1

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

C++STL容器和算法 · 图 2

decltype获取匿名函数的类型

C++STL容器和算法 · 图 3

set集合有序唯一/insert/erase/find/count统计当前集合中为某个值的个数/底层为红黑树

multiset有序不唯一,有特殊性质,红黑树

unordered_set 无序唯一,底层为哈希表

set作用:

C++STL容器和算法 · 图 4
C++STL容器和算法 · 图 5
C++STL容器和算法 · 图 6

上面第三张图中在删除单个元素时要判断这个元素是否存在,不然如果这个元素不在还删除的话会报错,但是问题出在的是find,而不是删除。

erase➕find是删除一个为n的元素

erase n是删除所有的n元素

代码块C++
multiset<int> s;
s.erase(s.find(数组名[index]);
s.erase(s.find(值);

关于unordered_set 的未知区域

1.

C++STL容器和算法 · 图 7

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

2.

C++STL容器和算法 · 图 8

计算后的结果是2,0.1+0.2!=0.3,存在误差

想忽略误差,使他们相等,就得使用“1.”中的自定义方法

消除误差:

C++STL容器和算法 · 图 9

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

Multimap

unordered_map

unordered_multimap

C++STL容器和算法 · 图 10

默认按照key字典序输出(abcd——)

可通过下标运算符“图名["key"]”找出对应的value,如果key是不存在的,值为0

下标取值会影响“图名.size”的值,原理是在通过下标运算符查找时,如果没有查找到这个key,那么就插入一个键值对,值为0。

C++STL容器和算法 · 图 11

用下标取值等于这个get函数,第一行string前补一个const

可在cppreference.com中查找更多算法

今天做这个总结连入门都不算,之后再来丰富文档内容(做题,学习原理之后)

C++STL容器和算法 · 图 12