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

c++, vectory, struktury

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
59 wizyt
pytanie zadane 19 stycznia 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 przez mokrowski Mędrzec (153,580 p.)
edycja 20 stycznia 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 przez tangarr VIP (141,440 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 przez TOWaD Gaduła (3,770 p.)

i

np opreator<<

lub jakaś metoda print()

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

Podobne pytania

0 głosów
0 odpowiedzi 27 wizyt
0 głosów
1 odpowiedź 352 wizyt
0 głosów
1 odpowiedź 374 wizyt
pytanie zadane 22 września 2016 w C i C++ przez wixy0 Gaduła (3,700 p.)

90,297 zapytań

138,894 odpowiedzi

311,080 komentarzy

60,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...