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

Iterator C++

VPS Starter Arubacloud
0 głosów
489 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,370 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ź 406 wizyt
pytanie zadane 19 marca 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 125 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez karmider013 Początkujący (340 p.)
0 głosów
0 odpowiedzi 183 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...