尝试编写我自己的反向函数

Posted

技术标签:

【中文标题】尝试编写我自己的反向函数【英文标题】:Trying to write my own reverse function 【发布时间】:2017-11-19 18:28:51 【问题描述】:

我正在尝试编写自己的反向算法来反转元素序列的顺序。我只使用“第一个”和“限制”,这就是所有函数都将作为参数。是否可以编写一个函数来反转元素序列的顺序,其中第一个是最后一个,第二个是倒数第二个......等等。我试图不使用临时向量来存储元素。这可能吗?如果我的问题有什么不清楚的地方,请告诉我。 谢谢! 我正在使用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());
 

【问题讨论】:

到目前为止您尝试过什么,我们在谈论哪种编程语言? 我已将其添加到顶部的问题中,很抱歉造成混淆。 在初始化为0的函数中使用临时变量。交换第一个最后一个迭代器元素,然后在第一个和最后一个位置加1和减1,以指向倒数第二个元素并继续交换直到左 【参考方案1】:

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

A K Q J 10

现在,您想就地颠倒顺序。你想要 10 开头,Ace 结尾。所以交换它们:

10 K Q J A

现在交换国王和杰克:

10 J Q K A

而你的名单是相反的!

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

关于解决这类问题的一点提示:不要试图在计算机上解决它。相反,建立一个物理模型(如扑克牌),并考虑如何在没有计算机的情况下解决问题。你会惊讶于这种方法的工作频率,而且你做的越频繁,你就越擅长。

算法设计与编码无关。算法设计是提出解决问题的步骤。找到方法后,然后编写代码来实现解决方案。

【讨论】:

就是这样,我正在尝试获取它,以便它适用于任何尺寸,我不太确定它是否会像我使用交换的方式那样工作。我知道您在说如何针对固定矢量大小执行此操作,但如果它会发生变化则不知道 是的,您可以编写适用于任何规模的通用算法。【参考方案2】:

使用std::iter_swap 应该很容易让您做到这一点。

【讨论】:

如果您要投反对票,请至少留下评论原因。

以上是关于尝试编写我自己的反向函数的主要内容,如果未能解决你的问题,请参考以下文章

神经网络-反向传播,训练误差

编写一个函数 reverse_string(char * string)实现:将参数字符串中的字符反向排列 。(递归实现)

在 pytorch 中创建自定义梯度下降

编写我自己的 linux shell I/O 重定向 '>' 函数

如何编写与 laravel 相同的自己的 DD() 函数?

R:实现我自己的梯度提升算法