【问题标题】:Behavior of mutating STL algorithms acting on sequences of movable but non-copyable objects作用于可移动但不可复制对象序列的变异 STL 算法的行为
【发布时间】:2014-04-13 18:30:34
【问题描述】:

如果我有一个可移动但不可复制的类 Foo 并将其存储在 std::vector 中,那么应用分区或排序等算法是否有任何警告?作为这些算法的一部分,正确实现的不抛出交换是否应该保证正确的行为?

【问题讨论】:

  • 你试过了吗?你有遇到什么问题吗?
  • std::sort 需要 RandomAccessIterators 是 ValueSwappable 并且其中 *ii 是这样的迭代器)是 MoveConstructible,请参阅 [alg.sort]。不存在或不可调用的复制构造函数应该是什么问题?只要 称为 构造函数(对于MoveConstructible)是移动构造函数,我看不出有任何问题。
  • @KerrekSB,我遇到了一些问题。我懒得把我的代码拿出来贴在这里,但我很快就会。

标签: c++ c++11 stl move-semantics stl-algorithm


【解决方案1】:

是的。

http://en.cppreference.com/w/cpp/algorithm/partition

http://en.cppreference.com/w/cpp/algorithm/sort

关于元素行为,这两种算法都只要求迭代器可以交换元素,这意味着如果它是可移动类型并且容器被正确实现,那么行为将是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多