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

Iterator C++

Object Storage Arubacloud
0 głosów
520 wizyt
pytanie zadane 31 maja 2017 w C i C++ przez Programeł Gaduła (3,500 p.)

Witam

Kiedy chce wyświetlić iteator to wyskakuje mi błąd podczas działania programu, nie kompilacji. Jakby co robię to w Visual Studio 2017.

kod:

#include <iostream>
#include <vector>

int main()
{
    using namespace std;
    
    int vec = 10;

    vector<int> liczby(3,vec);
   
    vector<int>::iterator ed = liczby.end(); 

     

    
    cout<<*ed<<endl;
    


    getchar();
    return 0;
}

Za wszelką pomoc dziękuje ;]

4 odpowiedzi

0 głosów
odpowiedź 31 maja 2017 przez 10kw10 Pasjonat (22,880 p.)

.end() zwraca wskaznik za ostatni element

0 głosów
odpowiedź 31 maja 2017 przez criss Mędrzec (172,590 p.)

.end() zwraca iterator na "element za ostatnim elementem". Wywalanie się programu jest tu zupełnie normalne.

0 głosów
odpowiedź 1 czerwca 2017 przez Patryk Kaczmarek Użytkownik (630 p.)

Jeśli chcesz faktycznie ostani element wystarczy od iteratora odjąć 1 i w ten sposób dostaniesz element ostatni

#include <iostream>
#include <vector>
 
int main()
{
    using namespace std;
     
    int vec = 10;
 
    vector<int> liczby(3,vec);
    
    vector<int>::iterator ed = liczby.end()-1; 
 
      
 
     
    cout<<*ed<<endl;
     
 
 
    getchar();
    return 0;
}

 

komentarz 1 czerwca 2017 przez criss Mędrzec (172,590 p.)

W sumie prawda, ale lepiej użyć std::prev. Iteratorem vectora jest po prostu wskaźnik także spełnia wymogi random access iteratora, ale w przypadku listy czy mapy juz by nie zadziałało.

0 głosów
odpowiedź 1 czerwca 2017 przez Bondrusiek Maniak (61,410 p.)

Cześć,

Iterator to obiekt realizujący operacje analogiczne do wskaźników. Możesz poruszać się po kontenerze za pomocą operatorów inkrementacji ++ lub dekrementacji --. A wartość wyłuskujesz wykorzystując operator dereferencji *. Oto przykładowy kod rozwiązujący Twój problem.

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    using namespace std;
    cout << "Here" << endl;
    int vec = 10;

    vector<int> liczby(3,vec);

  vector<int>::iterator ed = liczby.end();
  ed-=1;

  cout << *ed << endl;


  vector<int>::iterator bg = liczby.begin();
  bg += liczby.size() - 1;

  cout << *bg << endl;
  return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 426 wizyt
pytanie zadane 19 marca 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 130 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez karmider013 Początkujący (340 p.)
0 głosów
0 odpowiedzi 187 wizyt

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 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!

...