1、迭代器
std::vector<int> a;
// 正向迭代器,从第一个到最后一个元素遍历容器。
// 对于正向迭代器,++ 运算将访问下一个元素,而 -- 运算则访问上一个元素。
// 返回指向第一个元素的迭代器
a.begin();
// 返回指向最后一个元素的下一个位置的迭代器
a.end();
// 反向迭代器,从最后一个到第一个元素遍历容器。
// 对于反向迭代器,++ 运算将访问上一个元素,而 -- 运算则访问下一个元素。
// 返回指向最后一个元素的逆序迭代器
a.rbegin();
// 返回指向第一个元素上一个位置的迭代器
a.rend();
2、常用算法
std::vector<int> a;
// 默认升序排列,可重写比较函数
std::sort(a.begin(), a.end());
// 降序排列, T 表示数据类型
std::sort(a.begin(), a.end(), std::greater());
// 将元素翻转,即逆序排列
std::reverse(a.begin(), a.end());
// 返回最值的迭代器
std::min_element(a.begin(), a.end());
std::max_element(a.begin(), a.end());
auto [mn, mx] = std::minmax_element(a.begin(), a.end());
// 默认为累加,第三个参数为累加的初值,第四个参数可以指定的运算符进行的操作
std::accumulate(a.begin(), a.end(), 0)
// 序列化赋值为 0, 1, 2, 3, 4 ...
std::iota(a.begin(), a.end(), 0);
// 判断序列是否为有序序列,返回值为 bool
std::is_sorted(a.begin(), a.end());
// 返回范围中满足特定判别标准的元素数
std::count(a.begin(), a.end(), value);
// 用 lambda 表达式计量能被 3 整除的元素数。
std::count_if(a.begin(), a.end(), [](int i){ return i % 3 == 0; });
// 计算整数的基于 2 的对数法,返回数字中最高设置位的索引。
// 0 将返回 -1,1 将返回 0,16 将返回 4,1024 将返回 10
std::__lg(n)
// 遍历给定范围内的所有元素,并对每个元素进行判定:
std::all_of() // 序列中的所有元素都可以使谓词返回 true
std::any_of() // 序列中的任意一个元素都可以使谓词返回 true
std::none_of() // 序列中没有元素可以使谓词返回 true
std::vector<int> a{1, 2, 3};
std::all_of(a.begin(), a.end(), [](int x) { return x <= 3; });
std::any_of(a.begin(), a.end(), [](int x) { return x >= 3; });
std::none_of(a.begin(), a.end(), [](int x) { return x > 3; });
3、位运算
// 后缀 ll 的函数,均为 long long 类型下进行运算
// 1、__builtin_ctz() / __builtin_ctzll() 返回数的二进制表示形式中末尾 0 的个数。
std::cout << __builtin_ctz(64) << "\n";
// 输出:6
// 64 = (1000000)_2,末尾共有 6 个 0。
// 2、__buitlin_clz() / __buitlin_clzll() 返回数的二进制表示形式中前导 0 的个数。
std::cout << __builtin_clz(63) << "\n;
// 输出:26
// 63 = (0000 0000 0000 0000 0000 0000 0011 1111)_2 开头共有 26 个 0。
std::cout << __builtin_clzll(63) << "\n";
// 输出:58
// 3、__builtin_popcount() 返回数的二进制表示形式中 1 的个数。
std::cout << __builtin_popcount(4095) << "\n";
// 输出:12
// 4095 = (1111 1111 1111)_2,共有 12 个 1。
// 4、__builtin_parity() 返回数的二进制表示形式中 1 的个数的奇偶性(偶:0,奇:1)。
std::cout << __builtin_parity(1) << "\n";
// 输出:1
// 5、__builtin_ffs() 返回数的二进制表示形式中最后一个 1 在第几位(从后往前)
std::cout << __builtin_ffs(84) << "\n";
// 输出:3
// 84 = (101100)_2,所以是 3。
// 6、快速开平方,速度快十倍
__builtin_sqrt() // 8 位
__builtin_sqrtf() // 4 位
4、数据类型的最值
// 返回数据类型 T 的最大值.。
std::numeric_limits<T>::max();
// 返回数据类型 T 的"最小正数"。
std::numeric_limits<T>::min();
// 返回数据类型 T 的最小值。
std::numeric_limits<T>::lowest()