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

Struktury w c++

Object Storage Arubacloud
+1 głos
311 wizyt
pytanie zadane 10 marca 2021 w C i C++ przez huberos23 Nowicjusz (170 p.)
Mógłby mi ktoś powiedzieć, w którym miejscu programu definiuje się struktury?

2 odpowiedzi

+2 głosów
odpowiedź 10 marca 2021 przez tangarr Mędrzec (154,780 p.)
Struktury możesz definiować w dowolnym miejscu w programie.
Najlepiej umieszczać je w plikach nagłówkowych, aby były dostępne w różnych plikach źródłowych.
+1 głos
odpowiedź 10 marca 2021 przez VBService Ekspert (253,100 p.)

Mój ulubiony banalnie prosty przykład użycia struktury w "wektorze"  smiley

#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++

komentarz 10 marca 2021 przez NewEraOfPeace Gaduła (4,790 p.)
niezbyt rozumiem po co robisz tego optionala opt wewnątrz, możesz po prostu zwrócić {}, lub jeśli chcesz być bardziej explicit - std::nullopt
komentarz 10 marca 2021 przez VBService Ekspert (253,100 p.)
edycja 10 marca 2021 przez VBService

@NewEraOfPeace

niezbyt rozumiem po co robisz tego optionala opt wewnątrz, 

przeczytasz w 4 unikalne sposoby na problemy ze zwracaniem wartości w C++ ostatni przykład i podsumowanie i tu Jak używać std::optional z C++17, z lektury obydwu wpisów wynika, że oba rozwiązania są prawidłowe i zależą np. od kontekstu i uznania programisty.

2
komentarz 10 marca 2021 przez tkz Nałogowiec (42,000 p.)
Chodzi o czystość. Niepotrzebnie jest tworzony obiekt std::optional. Co do wydajności, to bez różnicy, przynajmniej od standardu 17 przez RVO i NRVO.

Podobne pytania

0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 25 maja 2020 w C i C++ przez dominik195k Obywatel (1,030 p.)
0 głosów
1 odpowiedź 197 wizyt
0 głosów
1 odpowiedź 912 wizyt
pytanie zadane 1 maja 2020 w C i C++ przez Atman Użytkownik (810 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...