如何以递归方式反转具有数组及其大小的任何数据类型数组?
像:
int array[] = {1,2,3,4,5,6,7,8,9};
So that int array[] = {9,8,7,6,5,4,3,2,1}
OR
std::string array[] = {"ab", "aaa", "xxx", "ddd"};
So that it becomes std::string array[] = {"ddd","xxx","aaa","ab"}
不使用 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);
}
}
答案 0 :(得分:4)
#include <algorithm>
std::reverse( std::begin(array), std::end(array) );
无论元素的类型如何,都可以工作。
答案 1 :(得分:-2)
在这种情况下,我不明白你对递归的意思。 无论如何,我将通过第一个例子的解决方案解释我是如何做到的:
for(int i = 0; i < 4; ++i){
int temp;
temp = array[i];
array[i] = array[8-i];
array[8-i] = temp;
}
首先你必须知道你的数组有多少元素,然后如果这个数字是偶数你可以循环for
以上i < n/2
,如果它是奇数直到最低的一半和最接近的偶数(这里有9个元素,然后是8/2 = 4),因为数组中间的数字会与自身交换。
for
周期通过临时对象(temp
)交换元素,用于&#34;存储&#34;:想象array[i]
,temp
和array[8-i]
作为方框,打开第一个并将第二个元素复制到代码中。
偶数案例:
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;
}
无论如何,尝试学习如何在任何地方使用STL,比如aschepler建议你,你可以谷歌为什么。