Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何递归地反转任何数组?(不使用C+;+;标准库)_C++_Recursion - Fatal编程技术网

C++ 如何递归地反转任何数组?(不使用C+;+;标准库)

C++ 如何递归地反转任何数组?(不使用C+;+;标准库),c++,recursion,C++,Recursion,如何递归地反转任何具有数组及其大小的数据类型数组? 比如: 不使用C++标准库的原因是,问题并不是简单地为您解决的,您包括一个库,调用一行,这样就解决了问题 这个问题的目的是以不同的方式解决这个问题,以便更好地理解和掌握其他语言工具和编程概念 #include <iostream> template<typename T> void swap(T& t1, T& t2) { T tmp(t1); t1=t2; t2=tmp; }

如何递归地反转任何具有数组及其大小的数据类型数组?

比如:

不使用C++标准库的原因是,问题并不是简单地为您解决的,您包括一个库,调用一行,这样就解决了问题

这个问题的目的是以不同的方式解决这个问题,以便更好地理解和掌握其他语言工具和编程概念

#include <iostream>

template<typename T> 
void swap(T& t1, T& t2) {
   T tmp(t1);
   t1=t2; 
   t2=tmp;  
}  

template<typename T> void 
reverse(T* first, T* last) {// Array of type T, indistinct type

    if(first < last)
    {
        swap(*first, *last);
        reverse(first+1, last-1);
    }
}
#包括
模板
无效掉期(T&t1、T&t2){
T-tmp(t1);
t1=t2;
t2=tmp;
}  
模板空隙
反向(T*first,T*last){//类型为T的数组,类型不清晰
如果(第一次<最后一次)
{
掉期(*第一,*最后);
反向(第一个+1,最后一个-1);
}
}
#包括
std::reverse(std::begin(数组),std::end(数组));

无论元素的类型如何,它都能工作。

我不明白在这种情况下递归的含义。 无论如何,我将通过您第一个示例的解决方案来解释我是如何做到这一点的:

for(int i = 0; i < 4; ++i){
       int temp;
       temp = array[i];
       array[i] = array[8-i];
       array[8-i] = temp;
   }

无论如何,试着在任何地方学习如何使用STL,就像aschepler建议的那样,你可以用谷歌搜索为什么。

如果你想实现一个算法,只需转到。“非STL”“实现就在那里。@PaulMcKenzie出于某种原因,OP想对此使用递归……STL不够好,非STL实现不够好——我们要走多远?@PaulMcKenzie这与STL无关。STL很棒。这是关于如何在没有STL的情况下做事情。STL是C++标准库,它有数以千计的有用的容器、数据结构和功能。有时候,人们想知道事情在幕后是如何运作的。这是一个很难理解的惩罚吗?展示一个已经存在的实现有什么不对?我本可以不显示任何链接,复制并粘贴下面这些链接的答案,再做一些修改,这样会更好吗?此外,有成千上万的站点使用数组和递归显示反转。否决票的一个原因是“缺乏研究”。我能问一下为什么否决票?这不是一个好答案。例如,第一块代码应该是函数的一部分-显示函数。在C++中,我们总是希望初始化事物,而不是使用赋值。类似地,在第二段代码中,我考虑了初始化问题,但知道至少默认情况下初始化了数字类型,比如int到零。在我看来,投反对票可能会让人想到一个错误的答案。不管怎样,你可以自由投票,我来这里学习。非常感谢。但我知道至少数字类型在默认情况下是初始化的,比如int到零!
#include <algorithm>

    std::reverse( std::begin(array), std::end(array) );
for(int i = 0; i < 4; ++i){
       int temp;
       temp = array[i];
       array[i] = array[8-i];
       array[8-i] = temp;
   }
int array[] = {1,2,3,4,5,6,7,8,9,10};

   for(int i = 0; i < 5; ++i){
       int temp;
       temp = array[i];
       array[i] = array[9-i];
       array[9-i] = temp;
   }