7 篇文章

  • 1-Container

    1 Container 1.1 std::vector 迭代器在vector插入超过容量后,自动扩容时失效 引用语义在使用 span 时必须谨慎。将一个新元素插入 vector 中,该 vector 中保存了跨度所引用的元素。由于 span 的引用语义,若 vector 分配新的内存,会使所有迭代器和指向其元素的指针无效,所以重新分配也会使引用 vector 元素的 span 失效。span 指向了不再存在的元素。 出于这个原因,需要在插入前后都要仔细检查容量 (分配内存的最大元素数量)。若容量发生变化,则重新初始化 span .

  • 2-Algorithm

    2 Algorithm 2.1 std::transform std::transform applies the given function to the elements of the given input range(s), and stores the result in an output range starting from d_first.

  • 3-Iterator

    3 Iterator 输入迭代器:只能用来读取指向的值;当该迭代器自加时,之前指向的值就不可访问。 std::istream_iterator 就是这样的迭代器。 前向迭代器:类似于输入迭代器,可以在指示范围迭代多次 std::forward_list 就是这样的迭代器。就像一个单向链表一样,只能向前遍历,不能向后遍历,但可以反复迭代。 双向迭代器:这个迭代器可以自增,也可以自减,迭代器可以向前或向后迭代。 std::list, std::set 和 std::map 都支持双向迭代器。 随机访问迭代器:与其他迭代器不同,随机访问迭代器一次可以跳转到任何容器中的元素上,而非之前的迭代器,一次只...

  • 4-Filesystem

    4 FileSystem 文件系统库提供对文件系统及其组件(例如路径、常规文件和目录)执行操作的工具。 文件系统库最初开发为boost.filesystem ,并作为技术规范 ISO/IEC TS 18822:2015发布,最终于 C++17 合并到 ISO C++ 中。目前,boost 实现在比 C++17 库更多的编译器和平台上可用。 如果对此库中的函数的调用引发文件系统竞争,即当多个线程、进程或计算机交错访问和修改文件系统中的同一对象时,则行为未定义。 4.1 定义 file:保存数据的文件系统对象,可以写入、读取或两者兼而有之。文件具有名称、属性,其中之一是文件类型: 目录:充当目录条...

  • 5-View

    5 View 通常若引用范围的元素修改,则视图的元素也会修改。 若视图的元素修改,则引用范围的元素也会修改。 视图通常用于在特定的基础上,处理基础范围的元素子集和/或经过一些可选转换后的值。例 如,可以使用一个视图来迭代一个范围的前五个元素 for (const auto& elem : std::views::take(coll, 5)) { ..

  • 6-Span

    6 Span 💀 这段代码会导致未定义的行为,因为基于范围的 for 循环中存在一个 bug,在对临时对象的引用上进行迭代时会使用已经销毁的值 // for the last 3 returned elements: for (auto s : std::span{arrayOfConst()}.last(3)) // fatal runtime ERROR.

  • The history of C++ Asynchronous Solutions

    C++ 的异步执行方案历史演进,从标准库的 Future 和 Promise,到 Folly 的扩展封装,再到 C++26 中的 std::execution 和协程的结合,详细介绍了各个方案的原理和使用方法。