奇怪的东西
奇怪的东西
Lambda表达式
其实就是C/C++
函数的另一种定义方式
1 | //Lambda |
1 | void dfs(int u) |
function<void(int)>
:一个 C++ 标准库中的std::function
类型,表示一个可以接受一个int
参数并返回void
的可调用对象。[&]
:捕获列表.表示 lambda 表达式可以通过引用捕获周围作用域中的所有变量。使得你可以在lambda
内部访问外部的变量.
stringstream
stringstream
是 C++ 标准库中位于 <sstream>
头文件内的一个类,主要用作字符串的流式处理。它可以像流一样操作字符串,用来将不同类型的数据插入到字符串中或从字符串中提取数据,方便类型转换和字符串拼接。(豪丸)
1 | //主要用法 |
bitset
1 | //初始化 |
类型转换
static_cast
,dynamic_cast
,const_cast
,reinterpret_cast
。
C++ 中用于进行显式的类型转换的关键字,每个操作符有不同的用途和适用场景。比 C 风格的强制转换更具类型安全性,可读性。
static_cast
用于普通的类型转换,适用于已知类型之间的转换。
1 | double d = 3.14; |
dynamic_cast
用于处理类层次结构中的类型转换
1 | class Base { |
const_cast
用于去除或添加 const
限定符。
1 | const int x = 10; |
reinterpret_cast
用于进行低级别的指针或引用转换,允许你在不进行任何检查的情况下将一种类型转换为另一种完全不相关的类型。这种转换是最强大和最危险的。
1 | int a = 10; |
奇怪的返回值类型
.size()
STL的容器的.size()
函数的返回值类型是size_t
,他是一个无符号整数,位数却决于你的机器架构。int
和size_t
进行运算的时候,默认是将int
转为size_t
,这可能引起问题,需要我们自己进行类型转换。
it - numbers.begin()
两个迭代器的差,返回值类型是difference_type
,通常被定义为 ptrdiff_t
类型,是一个有符号整数。ptrdiff_t
用于表示指针之间的差值,在 C++ 中常用于表示迭代器之间的差值,ptrdiff_t
的大小与机器架构相关。
emplace
emplace
是push_back
和insert
的上位替代,使用 emplace
时,直接在容器内部构造对象,避免了额外的拷贝或移动操作,而使用 insert
和push_back
时,通常需要先创建一个临时对象,然后再将其插入容器。
emplace
的返回值是std::pair
,其中first
是一个迭代器,指向插入的元素,second
是bool
,表示插入是否成功(对于自动去重的容器,元素已存在,则插入失败)。
因为上面说的特性,存在如下情况。
1 | set<pair<int, int>> st; |