• 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
226 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 (156,220 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,860 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 (6,000 p.)

i

np opreator<<

lub jakaś metoda print()

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

Podobne pytania

0 głosów
0 odpowiedzi 146 wizyt
0 głosów
1 odpowiedź 814 wizyt
0 głosów
1 odpowiedź 516 wizyt
pytanie zadane 22 września 2016 w C i C++ przez niezalogowany

92,691 zapytań

141,603 odpowiedzi

320,103 komentarzy

62,051 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

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!

...