试着写我自己的反向功能

时间:2017-11-19 18:28:52

标签: c++ algorithm vector reverse

我正在尝试编写自己的反向算法来反转元素序列的顺序。我只使用'first'和'limit',所有函数都将作为参数。是否有可能编写一个函数来反转元素序列的顺序,其中第一个是最后一个,第二个是倒数第二个......等等。我试图不使用临时向量来存储元素。这可能吗?如果我的问题中有任何不清楚的地方,请告诉我。  谢谢! 我正在使用c ++ 11,这是我到目前为止所做的......并不多。如果我不想使用临时矢量,我真的不知道使用什么逻辑。

template<typename Iter>
void reverse(Iter first, Iter last)
{

}


int main()
{
    std::vector<int> vector = {1,2,3,4,5};
    std::cout << reverse(vector.begin(),vector.end());
} 

2 个答案:

答案 0 :(得分:0)

考虑一下如何手动执行此操作。在桌子上放五张扑克牌:

A K Q J 10

现在,您希望就地撤销订单。你想要10开头,最后是Ace。所以交换它们:

10 K Q J A

现在交换国王和杰克:

10 J Q K A

你的清单正好相反!

该通用算法适用于任何大小的列表。我会把编码留给你。

解决这些类型问题的一点提示:不要试图在计算机上解决它。相反,建立一个物理模型(如扑克牌),并思考如何在没有计算机的情况下解决问题。你会惊讶地发现这种情况经常发生,你做的越频繁,就会越好。

算法设计与编码无关。算法设计是关于提出解决问题的步骤。有了方法之后,然后就会编写代码来实现解决方案。

答案 1 :(得分:-1)

使用std::iter_swap应该可以轻松地执行此操作。