【问题标题】:Using std::swap on a vector of int [duplicate]在 int 的向量上使用 std::swap [重复]
【发布时间】:2015-12-22 21:41:29
【问题描述】:

我有一个 int 的 vector... 我只想交换两个值。

    std::vector<int> vec;

    vec.push_back(0);
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    vec.push_back(4);
    vec.push_back(5);
    vec.push_back(6);
    vec.push_back(7);
    vec.push_back(8);

    std::swap(vec.begin(), vec.end());

在调用交换之前,我的 vec 为:

[0,1,2,3,4,5,6,7,8]

std::swap(...) 之后,我希望 vec 为:

[8,1,2,3,4,5,6,7,0]

但它仍然是初始状态。 这里有什么问题?

【问题讨论】:

  • 您正在寻找std::iter_swap,它会交换取消引用的值。你也不能给它vec.end() 作为参数。
  • 为什么还能编译? swap 需要左值作为参数,beginend 产生右值。此 MSVC 是否启用了语言扩展?
  • 如果 OP 尝试使用 .end() 迭代器,@LogicStuff iter_swap 将无济于事
  • @vsoftco 我已经尝试使用 clang++ 和 g++ 以及 libc++ 和 libstdc++,它没有编译coliru.stacked-crooked.com/a/4bafc70816c9eba6
  • @dyp 我收回了,我取消了它们的引用。确实编译起来会非常奇怪。可能 OP 正在使用 MSVC,它允许右值绑定到非 const ref。

标签: c++ vector swap


【解决方案1】:

这应该可以解决问题

assert(!vec.empty());
std::swap(vec.front(), vec.back());

【讨论】:

    猜你喜欢
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多