Примечание: Использование соответствующих функций из STL (std::reverse
и std::find
) лучше, я просто предполагал, что вы обязаны реализовать это самостоятельно.
Шаг один: Написать надлежащую функцию обратного. Тот, который принимает (указатель на) начало, а также (указатель на) конца диапазона, который следует перевернуть.
Шаг два: Написать функцию, чтобы найти (первое положение) Стражу в массиве (подать через начало и конец, опять же)
Шаг три: Соедините два: Reverse от начиная с позиции вашего дозорного.
Пример без шаблонов:
void reverse(int * from, int * to) {
while ((to - from) > 1) {
--to;
int temp = *from;
*from = *to;
*to = temp;
++from;
}
}
int const * find(int const * from,
int const * const to,
int const value) {
while ((from != to) && (*from != value)) {
++from;
}
return from;
}
void reverse_until (int * const from,
int * const to,
int const sentinel) {
int const * const position_sentinel = find(from, to, sentinel);
reverse(from, from + (position_sentinel - from));
// return the sentinel position from this function
// if you want only the reversed part
}
Протестировано:
int main() {
int test[10];
for (size_t i = 0; i < 10; ++i) {
test [i] = i + 1;
}
reverse_until (test, test + 10, 6);
copy(test, test + 10, ostream_iterator<int>{cout, " "});
return 0;
}
(live here)
Тогда почему вы распределения размера 'arraysize', когда у вас есть только 3 элементов (менее' ARRAYSIZE 'длина)? –
Да, это может быть простое решение, но мы не должны этого делать. – Siri
Ахмед, это не совсем решило проблему. Исходный массив 1 2 3 и обратный был 3 1 2 – Siri