【问题标题】:Is `std::list::splice(std::const_iterator pos, std::list&& other)` guaranteed to leave `other` empty?`std::list::splice(std::const_iterator pos, std::list&& other)` 是否保证将 `other` 留空?
【发布时间】:2020-05-26 14:45:01
【问题描述】:

std::list::splice(std::const_iterator pos, std::list&& other) 是否保证将other 留空?

【问题讨论】:

    标签: c++ linked-list stl c++14


    【解决方案1】:

    是的,std::list::splice 保证。

    (强调我的)

    1) 将所有元素从其他元素转移到*this。元素插入到pos 指向的元素之前。 容器other在操作后变为空。如果 other 引用与 *this 相同的对象,则行为未定义。

    来自标准,[list.ops]/4

    (强调我的)

    效果:在position之前插入x的内容,x变为空。指向x 的移动元素的指针和引用现在指的是相同的元素,但作为*this 的成员。引用移动元素的迭代器将继续引用它们的元素,但它们现在表现为指向 *this 的迭代器,而不是指向 x 的迭代器。

    【讨论】:

    • 为什么存在R值other版本的函数?
    • @Museful 否则不能用右值列表调用?
    • 但是左值引用参数不能绑定到右值吗?
    • @Museful 不,右值不能绑定到左值引用。
    • @Museful 不可能是const;那么我们不能修改它(并使其为空)。
    【解决方案2】:

    目的地会从一个空列表开始吗?然后你可以swap 列表。

    否则,如果您不确定您可以将源列表move 放入目标列表,然后将clear 源列表。

    【讨论】:

      猜你喜欢
      • 2020-05-27
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      相关资源
      最近更新 更多