【发布时间】:2017-10-07 17:26:23
【问题描述】:
我将一个包含 20 个项目的向量传递给下面的函数。我的目标是更改向量中项目的顺序。如果列表包含项目 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++ 向量迭代器不可解引用
有什么想法吗?我还没有找到任何可以实现我想要实现的样本。
std::reverse 确实可以使用,我正在处理的任务需要我使用 iter_swap。
【问题讨论】:
-
你不想交换迭代器,你想停止对迭代器所代表的元素的引用。如
*it。再说一次,你不需要自己写这个,看看@Soren的答案。 -
仅供参考,当
i==0、list.end() - i仅等同于list.end()时,这不是您可以交换的有效元素。此外,如果您一直迭代到list.size(),您最终将反转向量两次;到循环结束时,你会发现你什么也没做! -
@MohamadAliBaydoun 始终参考文档:
std::iter_swap()交换迭代器引用的项目,而不是迭代器本身。 -
@frslm 你应该这样回答。
-
@Dúthomhas 我应该!但看起来其他人已经这样做了