使用 std::swap 反转向量元素顺序的逻辑错误

问题描述 投票:0回答:1

我有一个关于 Strostrup 的编程原理和实践第 8 章的练习,它要求编写使用 std::swap 来反转

vector<int>
的元素的函数,这是我的代码

void rev_vect(vector<int>& v) {
    for (int i = 0; i < v.size(); i++)
            swap(v[i], v[v.size() - 1- i]);
}

问题是这个函数不会反转元素并且传递给它的向量保持不变,我试图看看我的函数是否有问题,但不幸的是我找不到任何可疑的东西!请帮我看看这个函数出了什么问题 如果我的问题缺乏正式性,我深表歉意,因为我是编程新手。

我知道向量下标运算符返回对向量元素的引用,并且

std::swap()
交换其参数的值,所以我认为我的逻辑应该是正确的。

c++ swap
1个回答
0
投票

由于您遍历了所有容器,因此交换元素两次。

正确的代码是:

void rev_vect(vector<int>& v) {
    for (int i = 0; i < v.size()/2; i++)
            swap(v[i], v[v.size() - 1- i]);
}
© www.soinside.com 2019 - 2024. All rights reserved.