gpt4 book ai didi

C++ 使用 iter_swap 改变 vector 的顺序

转载 作者:太空宇宙 更新时间:2023-11-04 14:52:50 25 4
gpt4 key购买 nike

我将一个包含 20 个项目的 vector 传递给下面的函数。我的目标是更改 vector 中项目的顺序。如果列表包含项目 1 2 3 4,我希望最终结果为 4 3 2 1。基本上将第一项与最后一项切换,将第二项与倒数第二项切换。

template<typename T>
void changePosition(std::vector<T>& list)
{
std::cout << "Swapping \n";
for (int i = 0; i < list.size(); i++)
{
std::iter_swap(list.begin() + i, list.end() - i);
}

std::cout << "Swapped \n";
}

我只是得到了错误:

c++ vector iterator not dereferencable

有什么想法吗?我还没有找到任何可以实现我想要实现的目标的示例。

std::reverse 确实可以使用,我正在处理的任务要求我使用 iter_swap。

最佳答案

list.end()指向 vector 的最后一个元素。所以在循环的第一次迭代中,list.end() - i将指向一个结束,并且不能被取消引用(或传递给 iter_swap )。

你应该使用 list.end() - i - 1相反,它从最后一个元素开始。

但是一旦你解决了这个问题,你就会遇到另一个问题:你的代码将每个元素交换两次,所以什么都不会改变。你应该停在 vector 的中间来解决这个问题。

当然,反转 vector 的最佳方法是使用标准函数 std::reverse而不是重新发明轮子。

关于C++ 使用 iter_swap 改变 vector 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46623071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com