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

Wskaźniki c++

Object Storage Arubacloud
0 głosów
213 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 Ekspert (344,860 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ź 470 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Mavannkas Bywalec (2,290 p.)
0 głosów
1 odpowiedź 787 wizyt
pytanie zadane 14 czerwca 2018 w C i C++ przez Mithriandil Początkujący (250 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...