- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
STL 顺序容器,如 vector、deque、list 支持插入以在给定迭代器之前插入元素,以支持如下语句
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
等)都支持在容器中向前向后遍历,所以很容易找到“之前”的item。 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 提供的链接。
关于c++ - STL 顺序容器支持 insert (before) 而 forward_list 支持 insert_after,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074300/
我想使用 std::forward_list 因为: Forward list is a container which supports fast insertion and removal of
std::forward_list具有member function: size_type remove(const T& value); 和一个non-member function std::er
我正在阅读有关此功能工作方式的不同解释。 cplusplus.com说这个函数应该“直接在 i 之后移动元素”。 然而cppreference.com表示它拼接元素 AT i。 MSvisual st
我有一个 std::forward_list我有一个类 Delegate (取自 here )是一个具有可变类型签名( typename return_type, typename... Args )
我正在尝试完成一个在给定 x 值时计算多项式的程序。多项式使用 STL 的 forward_list 存储在类的对象中。 class PolyTerm { private: int
我需要实现一个请求列表,一次发送一个请求(节流)并等待答复(始终按顺序)。因此操作是: 插入(在末尾) 删除(开始时) 向前走(“已发送”指针) 我刚刚发现了 std::forward_list,并且
As per this question , 和 假设我有一个对容器本身的可变引用 ,可以使用以下方法安全地删除迭代器的常量性: foo::const_iterator cit = ... ; foo
我正在尝试创建一个带有 forward_list 的按字母顺序排序的列表。计划是将所有元素与我要插入列表的元素进行比较,如果它大于一个元素,则将其插入。但问题是我想不出在最后一个元素之后插入元素的方法
我正在研究弗洛伊德的 Tortoise and Hare algorithm ,并尝试使用 std::forward_list 对问题建模。具体来说,我想使用 std::forward_list 有意
我正在实现一个非常简单的图模型,其中我有一个包含前向列表的结构,该列表带有指向它的邻居的指针。这些邻居又是相同类型的结构。 #include #include #include #include
我会为 C++11 forward_list 的节点创建一个内存池。 是否可以将 BOOST 池内存与 std::forward_list 一起使用? 最佳答案 This stack-overflow
我有两个转发列表:list1和 list2 .我想遍历第一个并根据条件将元素转移到第二个。这是一个使用 forward_list 的例子那行不通,但我认为表达了我想要的。 #include #inc
标准委员会选择为 std::forward_list 实现 API 是否有某种原因使其不满足序列 容器概念要求? Sequence 概念要求指定容器必须与以下表达式兼容: c.insert(it, v
这个问题在这里已经有了答案: std::forward_list and std::forward_list::push_back (5 个答案) 关闭 9 年前。 forward_list 是一个
好吧,我认为这个问题已经很概括了。我有一个独特项目的 forward_list,并想从中删除单个项目: std::forward_list mylist; // fill with stuff myl
std::forward_list 提供了 insert_after 和 erase_after 成员,它们可能不需要实际访问 std::forward_list对象。因此,它们可以作为 static
我在 C++11 中遇到了一些困难。我想创建函数 isSorted 如果我的 std::forward_list 已排序则返回 true,否则返回 false。 我想象中的代码是这样的: templa
我试图保留一个特定(基)类实例的全局列表,以便我可以随时通过遍历此全局列表来跟踪它们。 我认为解决这个问题的最合适方法是使用侵入式列表。例如,我听说人们可以通过深入研究 Linux 内核来遇到这些生物
我知道 std::forward_list 是一个单链表。我想知道如何将第一个元素(头)移动到 forward_list 的末尾。没有拷贝或创建新节点! 我试过以下方法: std::forward_l
以下是一个很琐碎的问题,以前可能有人问过,但是,我无法通过搜索找到答案。 我想做的是使用 std::forward_list 在 C++ 中实现“Cracking the Coding Intervi
我是一名优秀的程序员,十分优秀!