C/C++

Помогите решить на c++.

Условие
Добавьте в класс «Массив» циклическую индексацию. Это значит, что если индекс выходит за границы массива, то происходит не ошибка, а считается, что массив циклически повторяется бесконечное количество раз в обе стороны.

Для решения этой задачи переделайте оператор [] так, что он будет эмулировать работу с зацикленным в обе стороны массивом.

Формат входных данных
В первой строке вводится целое число n (1≤n≤10000) — количество элементов в массиве.

Во второй строке заданы элементы массива — целые числа, по модулю не превышающие 10^9.

В третьей строке вводится одно целое число k (1≤k≤10000) — количество чисел, которые нужно вывести.

В четвертой строке вводятся целочисленные индексы чисел, которые нужно вывести — p1, p2, ..pk (∣∣pi∣∣≤109).

Формат выходных данных
На экран нужно вывести k чисел через пробел — элементы массива на позициях p1, p2, ..pn.
------------------------------------------------------------------------------------------------------------
Примеры:
входные данныевыходные данные
6 | 1 1 1 1 1
8 3 1 9 7 14
5
8 2 -4 -10 14
#include <iostream>
using namespace std;
class Array {
public:
Array(int len, int val = 0) : len(len), data(new int[len]) {
for (int i = 0; i < len; ++i) data[i] = val;
}
Array(const Array& a) : len(a.len), data(new int[len]) {
for (int i = 0; i < len; ++i) data[i] = a.data[i];
}
~Array() {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
int length()const {
return len;
}
void reverse() {
for (int i = 0, j = len - 1; i < j; ++i, --j) {
swap(data[i], data[j]);
}
}
int& operator[](int i) {
while (i >= len) i -= len;
while (i < 0) i += len;
return data[i];
}
private:
int len;
int* data;
friend ostream& operator<<(ostream& out, const Array& a) {
for (int i = 0; i < a.len; ++i) out << a.data[i] << ' ';
return out;
}
friend istream& operator>>(istream& inp, Array& a) {
for (int i = 0; i < a.len; ++i) inp >> a.data[i];
return inp;
}
};
int main() {
int length;
cin >> length;
Array box(length);
cin >> box;
int count;
cin >> count;
Array indexes(count);
cin >> indexes;
for (int i = 0; i < count; ++i) cout << box[indexes[i]] << ' ';
puts("");
system("pause > nul");
}
Александр Анисимов
Александр Анисимов
90 894
Лучший ответ
Илья Бухалёв всё правильно, но только при проверке кол-ва чисел, данных на рисунке, выводит не "OK", а "TL".