Dodawanie obiektów do wektora

0

Mam taką klasę:
class car{
public:
string nazwisko;
string marka;
int rok;}
Muszę na bazie dołaczonego pliku, utworzyć obiekty do tej klasy, ale ich ilość ma być dowolna, więc chciałem do tego wykorzystać wektor, tylko problem w tym, że nie mam pojęcia jak to zrobić, bo nigdy go nie używałem. Mógłby mi to ktoś jakoś łopatologicznie wytłumaczyć?

0
kq napisał(a):

https://en.cppreference.com/w/cpp/container/vector Masz na dole przykład kodu.

No tak, i na liczbach to ogarniam, ale nie wiem jak to zrobić z obiektem, który ma 3 atrybuty, różnych typów

screenshot-20201013175949.png
Mam coś takiego, ale nie działa

8

Na liczbach ogarniasz, to świetnie. Wektor liczb powiększasz o kolejne poprzez dodanie... liczb! Dlaczego wektor aut chcesz powiększyć o coś, co nie jest autem?

0
kq napisał(a):

Na liczbach ogarniasz, to świetnie. Wektor liczb powiększasz o kolejne poprzez dodanie... liczb! Dlaczego wektor aut chcesz powiększyć o coś, co nie jest autem?

Dlatego proszę o ŁOPATOLOGICZNE wytłumaczenie, bo tego nie ogarniam

3

Jak chcesz mieć wektor obiektów jakiegoś typu, to tworzysz obiekt tego typu i wrzucasz go do wektora.

Ty nie próbujesz wrzucać car, tylko file.

0
Althorion napisał(a):

Jak chcesz mieć wektor obiektów jakiegoś typu, to tworzysz obiekt tego typu i wrzucasz go do wektora.

Ty nie próbujesz wrzucać car, tylko file.

Na początku próbowałem wrzucać car, ale dostawałem taką informację, jak w załączniku.

1

Błąd mówi, że nie starczyło Ci RAMu, żeby wrzucić auto do wektowa. Robisz coś bardzo dziwnego. Pokaż kod, który rzuca tym błędem.

0
stryku napisał(a):

Błąd mówi, że nie starczyło Ci RAMu, żeby wrzucić auto do wektowa. Robisz coś bardzo dziwnego. Pokaż kod, który rzuca tym błędem.

Jest wyżej na screenie

3
Czarniecki napisał(a):
kq napisał(a):

Na liczbach ogarniasz, to świetnie. Wektor liczb powiększasz o kolejne poprzez dodanie... liczb! Dlaczego wektor aut chcesz powiększyć o coś, co nie jest autem?

Dlatego proszę o ŁOPATOLOGICZNE wytłumaczenie, bo tego nie ogarniam

Nie umiem tego bardziej łopatologicznie wytłumaczyć. Umiesz dodać jabłko do jabłka, ale już pomarańczę próbujesz sumować z łopatą...

1

jeżeli nie używałeś wcześniej wektorów, to najpierw się z nimi zapoznaj, zrób kilka przykładów, np. TUTAJ. Jest też masa filmików na yt z tutorialami o wektorach. Później zrób swoją klasę Car i dodaj obiekty do wektora, TUTAJ jest podobny temat i w odpowiedzi masz kod. Z obsługą plików też masz problem, więc dodaj to na końcu. Jak nie zaczniesz pisać swojego kodu, to nic nie zrobisz

2

Możliwa rekonstrukcja wydarzeń:

OP miał pętlę postaci

while (file.good()) {
    Auto.push_back(car);
}

Jako, że nic nie czytał z pliku, to ta pętla była efektywnie nieskończona. Wrzucał nowe samochody do wektora, i skończyła się pamięć, a jako rezultat pozostał std::bad_alloc.

4

Kod:

#include <iostream>

using namespace std;

struct Car {
    string model;
    int year;
    enum Color {
        red = 0, green = 1, blue = 2
    } color;
};

int main() {
    while (cin.good()) {
        Car car;
        int iColor;
        string model;

        std::getline(cin, model);
        if (model.empty()) break;

        cin >> car.year;
        cin >> iColor;

        car.model = model;
        car.color = static_cast<Car::Color>(iColor);

        std::cin.ignore(256, '\n');

        cout << "Car: model '" << car.model << "', year: " << car.year << ", color: " << car.color << endl;
    }
    return 0;
}

Dane wejściowe:

Porsze 911
1990
1
Maluszek
1981
2
Skoda Fabia
2018
0

Wynik:

Car: model 'Porsze 911', year: 1990, color: 1
Car: model 'Maluszek', year: 1981, color: 2
Car: model 'Skoda Fabia', year: 2018, color: 0

Dopasuj do swoich potrzeb.

3

To może przykład podobny jak wyżej. Pomijam kwestię nazewnictwa zmiennych, poza Auto - to można pomylić ze słowem kluczowym auto - lepiej nie używać takich nazw. Pomijam kopiowanie obiektu, bo autor ma problem z drobnymi rzeczami. Ale niech ma i się bawi:

class Car {
public:
	string nazwisko;
	string marka;
	int rok;

	Car() : nazwisko(""), marka(""), rok(0) {}
};

Car wczytajObiekt(fstream& inputStream) {
	Car car;
	inputStream >> car.marka;
	inputStream >> car.nazwisko;
	inputStream >> car.rok;
	return car;
}

int main(int argc, char *argv[]) {
	cout << "Hello, World!" << endl;
	vector<Car> cars;
	fstream plik;
	plik.open(filePath, ios::in);

	if (!plik.is_open()) {
		cerr << "Nie można otworzyć pliku" << endl;
		return 1;
	}

	while (plik.good()) {
		Car car;
		car = wczytajObiekt(plik);
		cars.push_back(car);
	}

	for (Car car: cars) {
		cout << "Marka "     << car.marka
			<< ", nazwisko " << car.marka
			<< ", rok "      << car.rok
			<< endl;
	}

	plik.close();
	return 0;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.