• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wskaźniki c++

Aruba Cloud - Virtual Private Server VPS
0 głosów
410 wizyt
pytanie zadane 18 maja 2022 w C i C++ przez pasjonat_algorytmiki Pasjonat (19,540 p.)

Witam, 

Ostatnio bawiłem się trochę wskaźnikami z setem i zaciekawiło mnie coś takiego:

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> liczby {1,3,6,20,15};
    
    auto it = liczby.begin();
    it++;
    
    cout << *it;
    return 0;
}

Mogę bezproblemowo zrobić it++ lub it--, jednak nie mogę np it+=5 (wywala błąd).

Da się to jakoś obejść/naprawić czy to poprostu się nie da?

2 odpowiedzi

0 głosów
odpowiedź 18 maja 2022 przez adrian17 Mentor (352,580 p.)

Po pierwsze, to nie wskaźnik, to iterator. Wskaźnik jest przykładem iteratora, tak jak kwadrat jest prostokątem - ale nie w drugą stronę :)

W każdym razie iterator std::set'a to bidirectional iterator (https://en.cppreference.com/w/cpp/container/set) więc można go pojedynczo inkrementować, ale nie z +=N. Zamysł tego jest taki że to nie jest natychmiastowa operacja, tylko ma złożoność czasową O(N), a używanie += na intuicję wygląda jak szybka operacja, więc byłoby to mylące.

Jak chcesz przesunąć o N to albo w zwykłej pętli

for (int i = 0; i < 5; ++i)
    it++;

albo z std::advance:

std::advance(it, 5);

Ale pod spodem to analogicznie zrobi pętlę.

(a inna sprawa, że jak w tym kodzie przesuniesz iterator o 5 miejsc, to wyjdzie poza koniec kontenera, bo ma 5 elementów)

0 głosów
odpowiedź 18 maja 2022 przez Apled Dyskutant (9,520 p.)

No viable overloaded '+='

Iterator jest obiektem, który umożliwia iterację po elementach kontenera za pomocą interfejsu zaadoptowanego od zwykłych wskaźników

 

  • operator++ (inkrementacji) przesuwa wskaźnik na następny element
  • operator* (dereferencji) oraz operator-> pozwalają na odczytanie wskazywanej przez wskaźnik wartości

Czasem wystarczy 2-3 wyniki z google, żeby dowiedzieć się tego, czego potrzeba, jak tutaj

Podobne pytania

0 głosów
1 odpowiedź 580 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Mavannkas Bywalec (2,290 p.)
0 głosów
1 odpowiedź 1,060 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Mithriandil Początkujący (250 p.)

93,335 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...