инвертировать массивы с помощью указателей - PullRequest
0 голосов
/ 05 января 2019

Я читал руководства по STL с сайта topcoder. Этот код был дан при объяснении итераторов. Здесь они сравнивают адреса для обращения массива.

Я не понял, как это работает? Работают ли итераторы так же, как операции с адресами вместо элементов?

void reverse_array(int *A, int N) {
    int *first = A, *last = A+N-1;
    while(first < last) {
        Swap(*first, *last);
        first++;
        last--;
    }
}

1 Ответ

0 голосов
/ 05 января 2019

Итератор позволяет нам думать о контейнере как о последовательности элементов.

Неважно, что это за контейнер. Например, vector, set, map - это разные контейнеры, но итераторы позволяют нам обрабатывать последовательности элементов из этих контейнеров, не беспокоясь о том, как контейнер реализован за кулисами.

Итератор - это объект, который по дизайну работает как указатель.

Примечание: operator<<() не перегружен для итераторов

если вы хотите перевернуть массив, попробуйте это с помощью STL:

#include <iostream>
#include <array>
using namespace std;

int main(){
    array<int,10> arr{ 1,2,3,4,5,6,7,8,9,10 };

    reverse(arr.begin(), arr.end());

    for (const auto &elem : arr) 
        cout << elem << " ";

return 0 ; 
}

Вы можете дополнительно изучить итераторы:

https://www.geeksforgeeks.org/iterators-c-stl/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...