Mój ulubiony banalnie prosty przykład użycia struktury w "wektorze"
#include <iostream>
#include <vector>
#include <experimental/optional> // c++ v.14+
using std::string;
using std::vector;
using std::cout;
using std::endl;
using std::experimental::optional;
struct Worker {
int ID;
string name;
string surname;
};
vector<Worker> workerList {{1,"Jan","Kowalski"},{2,"Adam","Nowak"},{3,"Juliusz","Słowacki"},{5,"Jan","Matunin"}}; // symulacja bazy danych
optional<Worker> getWorkerByID(int ID) {
optional<Worker> opt;
for(Worker worker : workerList) {
if(worker.ID==ID) opt=worker;
}
return opt;
}
optional<Worker> getWorkerByName(int curr, string name) {
optional<Worker> opt;
for(Worker worker : workerList) {
if(worker.ID==curr && worker.name==name) return worker;
}
return opt;
}
int main()
{
for (int i=1; i<=workerList.size()+1; ++i) {
optional<Worker> work=getWorkerByID(i);
cout << i << ". ";
if (work) {
cout << "Pracownik ID " << work->ID << ": " << work->name << " " << work->surname << endl;
} else {
cout << "Nie znaleziono pracownika o ID " << i << endl;
}
}
cout << endl;
string name="Jan";
for (int i=1; i<=workerList.size()+1; ++i) {
optional<Worker> work=getWorkerByName(i, name);
if (work) {
cout << "Pracownik: ID:" << work->ID << " " << work->name << " " << work->surname << endl;
}
}
cout << endl;
int i=1; optional<Worker> work = getWorkerByID(i);
if(work) cout << "Pracownik ID " << work->ID << ": " << work->name << " " << work->surname << endl;
else cout << "Nie znaleziono pracownika o ID " << i << endl;
i=4; work = getWorkerByID(i);
if(work) cout << "Pracownik ID " << work->ID << ": " << work->name << " " << work->surname << endl;
else cout << "Nie znaleziono pracownika o ID " << i << endl;
return 0;
}
który znajduje się m. in. w: 4 unikalne sposoby na problemy ze zwracaniem wartości w C++