【问题标题】:Swapping values in Array using my own swap function on C++在 C++ 上使用我自己的交换函数交换数组中的值
【发布时间】:2022-11-19 22:40:40
【问题描述】:

我试图使用我自己的 swapp 函数在我的数组中交换值。交换函数接受指针,我通过引用传递我的 xy 以及指向我的数组的指针。最后交换值。

在下面的数组中,我正在交换索引 0 和 1,但输出不起作用。

#include <iostream>
using namespace std;
void swapp(int arr[], int *x,  int *y) {
    int temp = arr[*x];
    *x = arr[*y];
    *y = temp;

}

int main() {
    int w[] = { 1,2,3,4 };

    swapp(w, &w[0], &w[2]);
for (int i = 0; i < 4; i++) {
        cout << w[i] << endl;
    }
}

将索引 0 与索引 1 交换并期望输出 2、1、3、4,但我得到了 3、2、3 4。

【问题讨论】:

  • 提示:您应该采用指向元素的指针或者数组和索引。不是都。你在交换吗元素或者你在交换指标
  • 您将 xy 视为元素和索引。他们不能两者兼而有之,决定一个
  • std::swap 怎么了?
  • 如果您提供指向要交换的元素的指针,那么为什么还要向该函数提供int arr[]?如果您想为要交换的元素提供索引,那么为什么要提供指针呢?

标签: c++


【解决方案1】:

像这样的事情怎么样:

void swapp(int *start, int *end)
{
    while (start < end) {
        auto tmp = *start;
        *start = *end;
        *end = tmp;
        ++start;
        --end;
    }
}

int main() {
    int w[] = { 1 };
    auto len = (sizeof(w) / sizeof(w[0]));

    swapp(&w[0], &w[len-1]);

    for (auto i = 0; i < len; i++) {
        cout << w[i] << endl;
    }
}

【讨论】:

  • OP 重新实现了std::swap。你重新实现了std::reverse。那不是问题要问的。无论如何,您应该解释您对代码所做的更改以及原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多