【发布时间】: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需要左值作为参数,begin和end产生右值。此 MSVC 是否启用了语言扩展? -
如果 OP 尝试使用
.end()迭代器,@LogicStuffiter_swap将无济于事 -
@vsoftco 我已经尝试使用 clang++ 和 g++ 以及 libc++ 和 libstdc++,它没有编译:coliru.stacked-crooked.com/a/4bafc70816c9eba6
-
@dyp 我收回了,我取消了它们的引用。确实编译起来会非常奇怪。可能 OP 正在使用 MSVC,它允许右值绑定到非 const ref。