在数组C ++中交换值

时间:2016-08-18 17:35:07

标签: c++ algorithm

这是代码:

for (i = 0; i < size; i++)
{
    swap(a[i], a[size - i - 1]);
}

它看起来是正确的..这是因为我在其他语言中使用它,但在C ++上它不起作用。有什么建议?感谢

4 个答案:

答案 0 :(得分:4)

你试过踩过这个程序吗?因为一目了然,它看起来不会起作用。

例如,对于以下输入,您将获得以下结果:

a = {0, 1, 2, 3, 4};
i == 0: a = {4, 1, 2, 3, 0};
i == 1: a = {4, 3, 2, 1, 0};
i == 2: a = {4, 3, 2, 1, 0};
i == 3: a = {4, 1, 2, 3, 0};
i == 4: a = {0, 1, 2, 3, 4};

看看发生了什么?数字交换,然后再次交换。

中途切断它可以解决问题。

for (i = 0; i < size / 2; i++)
{
    swap(a[i], a[size - i - 1]);
}

答案 1 :(得分:2)

for (i = 0; i < size / 2; i++)
{
    swap(a[i], a[size - i - 1]);
}

如果你去i < size

,你将交换每个项目两次

答案 2 :(得分:1)

由于您使用的是c ++,因此您可以使用一些非常棒的c++功能,例如std::reverse

std::reverse(&a[0], &a[0] + size);

Here is a live example.

答案 3 :(得分:0)

您可能正在寻找std::iter_swap。它使用适当的迭代器在数组中交换2个值:

std::iter_swap(std::begin(a) + i, std::end(a) - i - 1);