用c++编写一个使用类模板对数组进行元素循环右移操作的程序
时间: 2024-09-14 16:07:36 浏览: 35
模板类实现顺序表基本操作
在 C++ 中,我们可以创建一个类模板来实现通用的数组元素循环右移功能。这里是一个简单的例子:
```cpp
#include <iostream>
// 定义一个模板类 ShiftRight,用于处理任意类型的数组元素右移
template <typename T>
class ArrayShiftRight {
public:
// 构造函数,接收数组大小和初始值
ArrayShiftRight(T arr[], int size) : arr_(arr), size_(size) {}
// 循环右移函数
void shift(int steps) {
if (steps > 0) {
for (int i = 0; i < steps; ++i) {
std::swap(arr_[i], arr_[i + size_ - 1]);
}
} else if (steps < 0) {
// 如果步骤是负数,反转数组再左移
reverse();
shift(-steps);
reverse(); // 反转回去
}
}
private:
// 反转数组的辅助函数
void reverse() {
for (int i = 0; i < size_ / 2; ++i) {
std::swap(arr_[i], arr_[size_ - i - 1]);
}
}
private:
T arr_[];
int size_;
};
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);
ArrayShiftRight<int> arrayShift(numbers, size);
arrayShift.shift(2);
for (int num : arrayShift.arr_) {
std::cout << num << " ";
}
std::cout << "\n";
return 0;
}
```
在这个程序中,`ArrayShiftRight` 类模板接受一个数组和它的大小作为输入,然后提供了一个 `shift` 函数来实现循环右移。如果移动步数大于零,则直接将元素向右移动;如果步数小于零,先反转整个数组,然后再进行正向移动。
运行这个程序,你会看到数组元素被右移了指定的步数。
阅读全文