这是代码:
for (i = 0; i < size; i++)
{
swap(a[i], a[size - i - 1]);
}
它看起来是正确的..这是因为我在其他语言中使用它,但在C ++上它不起作用。有什么建议?感谢
答案 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);
答案 3 :(得分:0)
您可能正在寻找std::iter_swap
。它使用适当的迭代器在数组中交换2个值:
std::iter_swap(std::begin(a) + i, std::end(a) - i - 1);