尝试编写我自己的反向函数
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)实现:将参数字符串中的字符反向排列 。(递归实现)