W jaki sposób mogę wpisywać informacje do struck za pomocą vector'a

0

Witam, moim dzisiejszym problemem jest to że nie wiem w jaki sposób mogę wpisywać coś do struktur za pomocą vectorów. Przy użyciu zwykłej tablicy nie jest to problem, ale chciałbym móc stworzyć program w taki sposób by nie miał odgórnie nałożonego limitu ile pakietów danych może pomieścić, próbowałem najzwyczajniej w świecie zmienić kod który już napisałem dla zwykłych tablic, ale wtedy pojawiają się error'y że vector nie ma zadeklarowanych zmiennych.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

struct baza {
    string zespol;
    string utwor;
};

void prototyp(baza a);

int main()
{
    vector<baza> proba;
    string pisanie;
    for (int licznik = 0; licznik < 3; licznik++) {
        cin >> pisanie;
        proba.zespol.push_back(pisanie);
        cin >> pisanie;
        proba.utwor.push_back(pisanie);
    }

    for (int licznik = 0; licznik < 3; licznik++) {
        prototyp(proba[licznik]);
    }
    return 0;
}

void prototyp(baza a)
{
    cout << a.zespol << a.utwor;
}
3

Przecież w swoim kodzie nie masz zadeklarowanej zmiennej zespol, dlaczego więc próbujesz się do niej odwołać i co to miałoby robić?


Weźmy to na logikę: masz wektor, który przechowuje struktury. Co więc takiego wyimaginowanego może oczekiwać jego metoda `push_back`? Także struktury.

W takim razie musimy najpierw utworzyć strukturę, wczytać do niej dane, a potem tę strukturę wrzucić do wektora:

    for (int licznik = 0; licznik < 3; ++licznik) {
		baza tmp;
		cin >> tmp.zespol >> tmp.utwor;
		proba.push_back(tmp);
    }

Poza tym: 1. Nazwa metody `prototyp` nic nie mówi. Dlaczego więc wybrałeś taką nazwę, a nie na przykład `wyswietlUtwor`? (a najlepiej po prostu utworzyć metodę `wyswietl` w strukturze `baza`). 2. Porównaj sobie swój kod z tym: http://ideone.com/1whcil, zgadnij, który jest bardziej czytelny oraz dlaczego, wyciągnij wnioski.
2

Rozwiązanie najbliższe zwykłej tablicy byłoby mniej więcej takie:

vector<baza> proba(3);
string pisanie;
for (int licznik = 0; licznik < 3; ++licznik) 
{
    cin >> pisanie;
    proba[licznik].zespol = pisanie;
    cin >> pisanie;
    proba[licznik].utwor = pisanie;
}

Albo krócej:

vector<baza> proba(3);
for (int licznik = 0; licznik < 3; ++licznik) 
{
    cin >> proba[licznik].zespol;
    cin >> proba[licznik].utwor;
}

Jeszcze krócej:

vector<baza> proba(3);
for (int licznik = 0; licznik < 3; ++licznik) 
{
    cin >> proba[licznik].zespol >> proba[licznik].utwor;
}

Pamiętaj, że jak tworzysz wektor bez żadnych parametrów, to on jest pusty. Dlatego w moim kodzie masz baza(3), żeby od razu stworzyć wektor z trzema elementami.

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