Vector w strukturach, jak umieścić dane w argumentach struktury.

Odpowiedz Nowy wątek
2019-04-02 20:05

Rejestracja: 1 rok temu

Ostatnio: 2 miesiące temu

0

Witam, niestety nie udało mi się znaleźć na tytułowe pytanie jasnej odpowiedz w sieci więc zwracam się tutaj, proszę o pomoc i wyrozumiałość ponieważ dopiero się uczę.
Tak wiem słaby itd. (Uprzedzam niektóre komentarze )

#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
class person {

private:

    typedef struct {
        int id;
        char imie[20];
        char nazwisko[20];
        int wiek;
    } tosoba;
    int size;
    vector<tosoba>osoba;

public:

    void add_person(int size) {

        for (int i = 0; i < size; i++)
        {
            cout << "Podaj ID: ";                                     
            int id;
            cin >> id;
            osoba.id.push_back(id);                                 //tutaj mam problem
            cout << "Podaj imie: ";
            int imie;
            cin >> imie;
            osoba.imie.push_back(imie);
            cout << "Podaj nazwisko: ";
            int nazwisko;
            cin >> nazwisko;
            osoba.nazwisko.push_back(nazwisko);
            cout << "Podaj wiek: ";
            int wiek;
            cin >> wiek;
            osoba.push_back(wiek);

        }

    }

    void show_person(int size)
    {
        for (int i = 0; i < size; i++)
        {

            cout << tab[i].id << endl;

            cout << tab[i].imie << endl;

            cout << tab[i].nazwisko << endl;

            cout << tab[i].wiek << endl;

        }

    }

};

int main()
{
    int size;
    cout << "Podaj rozmiar tablicy:" << endl;
    cin >> size;

    person a;
    a.size = size;
    a.add_person(size);
    a.show_person(size);

    return 0;
}

Pozostało 580 znaków

2019-04-02 20:08
Moderator

Rejestracja: 12 lat temu

Ostatnio: 1 godzina temu

0

Twój kod używa std::vector<tosoba> jakby to była struktura list a nie lista struktur. Musisz najpierw stworzyć całą strukturę, a dopiero potem możesz ją wsadzić do wektora.


Pozostało 580 znaków

2019-04-02 20:51

Rejestracja: 6 lat temu

Ostatnio: 6 miesięcy temu

0

do vector<tosoba> osoba możesz wrzucać push_backiem tylko całe struktury tosoba, nie możesz wrzucać samych argumentów struktury

...
tosoba temp;
cout << "Podaj ID: ";                                     
int id;
cin >> id;
temp.id = id;
cout << "Podaj imie: ";
char imie[32];
cin >> imie;
strcpy(temp.imie, imie);
cout << "Podaj nazwisko: ";
char nazwisko[32];
cin >> nazwisko;
strcpy(temp.nazwisko, nazwisko);
cout << "Podaj wiek: ";
int wiek;
cin >> wiek;
temp.wiek = wiek;
osoba.push_back(temp);
...
edytowany 2x, ostatnio: au7h, 2019-04-02 20:58

Pozostało 580 znaków

2019-04-02 22:03

Rejestracja: 6 lat temu

Ostatnio: 2 dni temu

0

@Pabloo111:
Skoro klasa nazywa się person to powinna reprezentować dokładnie jedną osobę. No chyba, że piszesz program dla służb specjalnych, wtedy kilka tożsamości jest ok ;)
Jaki jest cel istnienia struktury tosoba? I po co ten typedef?


Wole wizerunek z nożem w zębach, przejść po trupie
Niż zgrywać ćwierćinteligenta z piórkiem w d.

Pozostało 580 znaków

2019-04-03 14:05

Rejestracja: 1 rok temu

Ostatnio: 2 miesiące temu

0
tajny_agent napisał(a):

@Pabloo111:
Skoro klasa nazywa się person to powinna reprezentować dokładnie jedną osobę. No chyba, że piszesz program dla służb specjalnych, wtedy kilka tożsamości jest ok ;)
Jaki jest cel istnienia struktury tosoba? I po co ten typedef?

Czysto teoretyczny, narzucony przez treść zadania, w treści zadania jest tak opisana struktura a nie chce zmieniać żeby później nie było że zmieniłem sobie zadanie i 0 punktów.

edytowany 1x, ostatnio: Pabloo111, 2019-04-03 14:07

Pozostało 580 znaków

2019-04-03 14:10

Rejestracja: 1 rok temu

Ostatnio: 2 miesiące temu

0
hauleth napisał(a):

Twój kod używa std::vector<tosoba> jakby to była struktura list a nie lista struktur. Musisz najpierw stworzyć całą strukturę, a dopiero potem możesz ją wsadzić do wektora.

A więc pierwsze przekazać do obiektu wartość size która będzie definiowała wielkość vektor`a a następnie przez inkrementacje przypisać wartości poszczególnych argumentów struktury, dobrze rozumiem ?

Edit: Dobra, jednak zrobię to w ten sposób co kolega @au7h napisał, dziękuje za pomoc. : )

edytowany 1x, ostatnio: Pabloo111, 2019-04-03 14:17

Pozostało 580 znaków

2019-04-03 14:13

Rejestracja: 1 rok temu

Ostatnio: 2 miesiące temu

0
au7h napisał(a):

do vector<tosoba> osoba możesz wrzucać push_backiem tylko całe struktury tosoba, nie możesz wrzucać samych argumentów struktury

...
tosoba temp;
cout << "Podaj ID: ";                                     
int id;
cin >> id;
temp.id = id;
cout << "Podaj imie: ";
char imie[32];
cin >> imie;
strcpy(temp.imie, imie);
cout << "Podaj nazwisko: ";
char nazwisko[32];
cin >> nazwisko;
strcpy(temp.nazwisko, nazwisko);
cout << "Podaj wiek: ";
int wiek;
cin >> wiek;
temp.wiek = wiek;
osoba.push_back(temp);
...

Ok o to mi chodziło, dzięki wielki : )

Pozostało 580 znaków

2019-04-03 14:30

Rejestracja: 12 lat temu

Ostatnio: 1 minuta temu

0

Tak wiem słaby itd. (Uprzedzam niektóre komentarze )

Nie chodzi o stwierdzenie, że jesteś słaby (każdy kiedyś był newbie), tylko o wymienienie błędów jakie popełniasz, żebyś mógł je naprawić i czegoś się nauczyć, wiec niczego nie "uprzedzasz".

  1. nie mieszaj polskiego i angielskiego w kodzie - najlepiej pisz tylko po angielsku
  2. jak korzystasz z C++ to czerp z niego garściami (unikaj kodu typowego dla C)
class person {
public:
    int id;
    std::string firstName;
    std::string lastName;
    int age;

    std::istream& interactiveRead(std::istream& in, std::ostream& out)
    {
        out<< "Podaj ID: ";                                     
        in >> id;
        out << "Podaj imie: ";
        in >> fisrtName;
        out << "Podaj nazwisko: ";
        in >> lastName;
        out << "Podaj wiek: ";
        return in >> age;
    }

    std::ostream& printTo(std::ostream &) {

    }
};

class human_resources
{
public:
     human_resources() {}

     void add(const person& p) {
          people.push_back(p);
     }

     void addFromConsole() {
           person p;
           if (p.interactiveRead(std::cin, std::cout))
               add(p);
     }

private:
     std::vector<person> people;
};

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2019-04-03 14:32

Pozostało 580 znaków

2019-04-03 14:37

Rejestracja: 1 rok temu

Ostatnio: 2 miesiące temu

0
MarekR22 napisał(a):

Tak wiem słaby itd. (Uprzedzam niektóre komentarze )

Nie chodzi o stwierdzenie, że jesteś słaby (każdy kiedyś był newbie), tylko o wymienienie błędów jakie popełniasz, żebyś mógł je naprawić i czegoś się nauczyć, wiec niczego nie "uprzedzasz".

  1. nie mieszaj polskiego i angielskiego w kodzie - najlepiej pisz tylko po angielsku
  2. jak korzystasz z C++ to czerp z niego garściami (unikaj kodu typowego dla C)
class person {
public:
    int id;
    std::string firstName;
    std::string lastName;
    int age;

    std::istream& interactiveRead(std::istream& in, std::ostream& out)
    {
        out<< "Podaj ID: ";                                     
        in >> id;
        out << "Podaj imie: ";
        in >> fisrtName;
        out << "Podaj nazwisko: ";
        in >> lastName;
        out << "Podaj wiek: ";
        return in >> age;
    }

    std::ostream& printTo(std::ostream &) {

    }
};

class human_resources
{
public:
     human_resources() {}

     void add(const person& p) {
          people.push_back(p);
     }

     void addFromConsole() {
           person p;
           if (p.interactiveRead(std::cin, std::cout))
               add(p);
     }

private:
     std::vector<person> people;
};

Ad1. Rozumiem tą zasadę ale nazwy które były w strukturze jak już wyżej napisałem były mi narzucone przez zadanie.
Ad2. Sposób który pisze nauczyłem się na studiach ale pewnie chciałbym się nauczyć pisać tak jak mówisz, dzięki za kod na pewno go przeanalizuje i douczę się tego co tam zaimplementowałeś .

Edit: z tym słąby chodziło mi o określenia tego typu, czyli ogólne nic nie wnoszące konkretnie. Niestety często ludzi piszą takie komentarze po których nawet nie dowiem się co jest źle

edytowany 1x, ostatnio: Pabloo111, 2019-04-03 14:38

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0