STL 顺序容器支持插入(之前),而forward_list支持insert_after
STL sequential containers support insert (before) whereas forward_list support insert_after
STL 顺序容器,如向量、双端、列表支持插入在给定迭代器之前插入元素以支持语句,例如
vector.insert(std::end(container), container2.begin(), container2.end())
而forward_list支持insert_after。为什么STL维护者必须做出这样的设计选择?
forward_list
被实现为单链表。列表中的每个节点都有一个指向列表中下一个元素的指针。(注意:指针在这里是一个通用术语)。
这意味着无法在列表中向后移动。您可以从列表的开头开始,然后继续前进,直到找到其链接指向您拥有的项目的元素,但这很昂贵。以这种方式插入列表是一种O(N)
操作(与O(1)
相反)
所有其他容器(vector
、string
、deque
、map
、set
、list
等)都支持在容器中向前和向后遍历,因此很容易找到"之前"的项目。 forward_list
没有。
至于名字,如果insert(list_iter, x)
放在list_iter
之前,insert(forward_list_iterator, x)
放在位置之后,会更令人困惑。 所以设计师给它们起了不同的名字。
[后来]这在最初的forward_list
提案中进行了讨论,可以在以下位置找到:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2448.html。感谢Howard Hinnant的链接。
相关文章:
- 编译时未启用intel oneApi CUDA支持
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用CMake检测支持的C++标准
- 为什么istream不支持右值提取
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 扩展光电二极管探测器以支持多个传感器
- MSVC是否支持C++11样式的属性而不是__declspec
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 完美前进使用 std::forward vs RefRefCast
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- 哪个C++规范开始支持 std::vector
- 如何检测VS C++编译器是否支持C++11?
- CertGetCertificateChain 具有支持的内存存储和证书信任列表
- Casablanca/cpprestsdk listener.support接受函数,但不支持方法
- 将 IPv6 支持添加到雨量计
- 为什么C++不支持对未初始化变量进行智能分析?
- LMDB 是否支持随机读取?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 在 Ubuntu 18.04 上编译 GLSL 着色器时"不支持 GLSL 3.30"?