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

c++, vectory, struktury

Object Storage Arubacloud
0 głosów
192 wizyt
pytanie zadane 19 stycznia 2023 w C i C++ przez krzysztof.polak Nowicjusz (120 p.)

Cześć,

jestem poczatkujący i piszę kod do zadania  FR_02_06 - BMI na spoju. Problem pojawia mi się podczas wyświetlania (w celu sprawdzenia czy dobrze wpisało do wektora) danego elementu wektora. Nie wiem czy źle zapisuje, ale opierałem się na innych przykładach, gdzie taka forma działała. Dodam, że zmiana                          cout << osoby.at(osoby.begin() + i);              na                    cout << osoby.at(i);        nie pomaga.

Część kodu:

int main() {
    Osoba osoba;
    int iloscbadanych = 0;
    vector <Osoba> osoby(iloscbadanych);
    vector <Osoba> osobyZNiedowaga(0);
    vector <Osoba> osobyOPrawidlowejWadze(0);
    vector <Osoba> osobyZNnadwaga(0);

    cin >> iloscbadanych;
    for (int i = 0; i < iloscbadanych; i++) {
        osoba = podajDaneOsoby();
        osoby.push_back(osoba);
        cout << osoby.at(osoby.begin() + i);
    }

Błąd:

C:\c\SEMINARIUM15\FR_02_06-BMI\main.cpp|47|error: no matching function for call to 'std::vector<Osoba>::at(__gnu_cxx::__normal_iterator<Osoba*, std::vector<Osoba> >)'|

Byłbym wdzięczny za pomoc, bo już się zamieszałem

komentarz 20 stycznia 2023 przez mokrowski Mędrzec (155,460 p.)
edycja 20 stycznia 2023 przez mokrowski
A nie lepiej std::queue lub nawet std::deque zamiast std::vector ? Przecież nie potrzebujesz dostępu do elementu wewnątrz tylko do pierwszego i ostatniego.

Oczywiście możesz to zrobić i std::vector. Tylko wtedy wydajna (pamięciowo) implementacja powinna być bardziej wyrafinowana.

1 odpowiedź

0 głosów
odpowiedź 19 stycznia 2023 przez tangarr Mędrzec (154,780 p.)

Funkcja std::vector::at() jako parametr przyjmuje indeks elementu, ty zaś próbujesz przekazać iterator.
https://en.cppreference.com/w/cpp/container/vector/at
Problematyczna linia powinna wyglądać następująco

cout << osoby.at(i);

lub ewentualnie

cout << osoby[i];

 

komentarz 19 stycznia 2023 przez TOWaD Mądrala (5,700 p.)

i

np opreator<<

lub jakaś metoda print()

osoby[i].print(); lub... wiele innych sposobów

Podobne pytania

0 głosów
0 odpowiedzi 137 wizyt
0 głosów
1 odpowiedź 749 wizyt
0 głosów
1 odpowiedź 465 wizyt
pytanie zadane 22 września 2016 w C i C++ przez niezalogowany

92,536 zapytań

141,376 odpowiedzi

319,452 komentarzy

61,920 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!

...