C++ στα Ελληνικά - Maps
13:05
Пікірлер
@officialdjbobroblox
@officialdjbobroblox 6 ай бұрын
thanks bro lol ωραίο tutorial πάντως! ☺
@johnniewalkerjohnniewalker2459
@johnniewalkerjohnniewalker2459 8 ай бұрын
Πολύ επεξηγηματικό βίντεο!!
@argoGR
@argoGR 9 ай бұрын
Γεια σου και μπράβο για την προσπάθεια σου. Γραφω εδώ, πριν δω όλο το βίντεο για να σου επιστήσω την προσοχή σε αυτό: Παρότι το βίντεο προορίζεται για αρχάριους, νομίζω πηγάινεις πολύ γρήγορα. Ξεκινάς, να κάνεις πράγματα πριν δείξεις κάποια βασικά του visual studio. Δεν έχω εμπειρία από visual studio, αλλά από μαθήματα online που έχω πάρει (web devepolment), πιστεύω θα έπρεπε στην αρχή να κάνεις ένα βίντεο μόνο για το visual studio , πω το εγκαθιστούμε κτλ. Ακόμη και με την όση εμπειρία έχω από το VS Code, μου δημιουργούνται απορίες με το καλημέρα. Μην το πάρεις στραβά, προσπαθώ να σε βοηθήσω. Πιστεύω μπορείς να φτιάξεις νέα βίντεο λογικά και να τα βάλεις πιο μπροστά από αυτό στην λίστα.
@incalite
@incalite 9 ай бұрын
Σε ευχαριστώ πολύ για το feedback! Είναι στον ορίζοντα τέτοιου είδους βιντεάκι
@mariannajohn
@mariannajohn 10 ай бұрын
Ωραιο και κατανοητό περιεχόμενο! Μόνο η μουσική στο background ειναι λίγο ενοχλητικη.
@errandam6219
@errandam6219 10 ай бұрын
Ωραίο θέμα και ωραία εξήγηση!
@georgeKir
@georgeKir 11 ай бұрын
Πολυ ενιδαφερον να βλεπεις ενα ελληνικο καναλι να ασχολειται με graphics programming .Πολυ καλο βιντεακι προσωπικα ασχολουμαι με gfx programming σε sdl2 και opengl(GLAD& glfw3) για game programming χωρις engine .Εχες βρει καποιο καλο documentation για την sdl περα απο το wiki?
@incalite
@incalite 11 ай бұрын
Χαίρομαι που βλέπω οτι υπάρχει ενδιαφέρον με τα graphics! Κοίτα, το wiki ειναι από μόνο του πολύ καλό resource αλλά η περισσότερη δουλειά γίνεται διαβάζοντας έτοιμες υλοποιήσεις από το github κυρίως σε arcade games όπως το pong, pacman, asteroids κλπ! Είναι απίστευτο τα πόσα μαθαίνει κάποιος μπαίνοντας στη διαδικασία να φτιάξει αυτά τα κλασικά παιχνιδάκια.
@georgeKir
@georgeKir 11 ай бұрын
@@incalite Tα εχω φτιαξεθ ηδη ολα αυτα from scratch με πολυ λιγο reference σε c αλλα ευχαριστω για το χρονο σου !
@errandam6219
@errandam6219 11 ай бұрын
Wraio anypomono na 3ekinhsei h seira!
@errandam6219
@errandam6219 11 ай бұрын
πως θα σου φενονταν να κανεις ενα βιντεακι πως να δεχετε ενα string τα Ελληνικα και πως μετατρεπεται ενα wstring σε string και αντιστροφα;
@brockdaniel8845
@brockdaniel8845 Жыл бұрын
Πώς κάνω το ακόλουθο με std::unique_ptr ; Ούτε το chatgpt ξέρει πάντως: void add_back(optional<shared_ptr<NODE>>& head, int32_t data) { shared_ptr<NODE> new_node = make_shared<NODE>(data, nullopt); if (head == nullopt) { head = new_node; return; } shared_ptr<NODE> last = head.value(); while (last->next) last = last->next.value(); last->next = new_node; }
@incalite
@incalite Жыл бұрын
Πρέπει να σκέφτεσαι και το context που θες να το χρησιμοποιήσεις. Στο πλαίσιο μιας linked list, όπου κάθε κόμβος έχει συνήθως έναν μόνο owner (τον προηγούμενο κόμβο), η χρήση του std::unique_ptr μπορεί είναι υπερβολικά περιοριστική, καθώς δεν επιτρέπει ευελιξία σε λειτουργίες που ίσως περιλαμβάνουν αντιγραφή ή shared χρήση των κόμβων. Δηλαδή τα σημεία head = new_node, . . . last = head.value(), last = last->next.value(), last->next = new_node θα παρουσιάζανε προβλήματα αναφοράς. Η χρήση του std::shared_ptr είναι ιδανική σε αυτή τη περίπτωση
@errandam6219
@errandam6219 Жыл бұрын
Να σε ρωτήσω κάτι άκυρο απλά το ψάχνω και δεν μπορώ να το βρω μήπως ξέρεις κάποια βιβλιοθήκη που να βρίσκει την διάρκεια ενός βίντεο του υπολογιστή και να την αποθηκεύει σε ένα string;
@incalite
@incalite Жыл бұрын
Για ρίξε μια ματιά στο OpenCV
@errandam6219
@errandam6219 Жыл бұрын
Αν θελω να κανω πινακα (Object** ptr) πως το κανω με unique ptr;
@incalite
@incalite Жыл бұрын
Δεν είναι καλή ιδέα γιατί εξουδετερώνεις κάποιες ιδιότητες του unique ptr και έχουμε ζητήματα με τα ownership semantics. Όταν χρησιμοποιούμε std::unique_ptr<Object*> ορίζουμε οτι θα διαχειριστούμε εμείς το ownership και την μνήμη και αν αντί για Object προσθέσουμε Object* πλέον δεν διαχειριζόμαστε μνήμη κάποιου Object αλλά μνήμη σχετικά με Object pointers. Είναι καλή πρακτική να χρησιμοποιείς containers για κάτι τέτοιο. Δηλαδή κάτι σαν: std::vector<std::unique_ptr<Object>>
@errandam6219
@errandam6219 Жыл бұрын
Έχεις πολυ ωραία γνωση και τα εξηγης πολυ καλα. Πως θα σου φενοταν να ξεκινήσεις μια σειρά με κατι πιο συνθετο όπως WinAPI,Opengl,socket(winsock) directX,Vulkan API ή διαχείρηση μνημης;
@incalite
@incalite Жыл бұрын
Σε ευχαριστώ πολύ! Έρχονται SDL και OpenGL Series. Διαχείριση μνήμης θα καλύψουμε στα series της C++
@errandam6219
@errandam6219 Жыл бұрын
@@incaliteΘα ήταν πολύ ωραίο, ελπίζω να το βγάλεις σύντομα. και για τον ήχο θα ήταν επίσης ενδιαφέρον δυδιαστατος,τριδιαστατος ηχος(openal π.χ.) ή παιχνίδι με pixel επίσης. Αλλά διαχείριση μνήμης, νομίζω ότι το μαθαίνεις σε μεγάλη κλίμακα, πώς λειτουργεί, πρέπει να συνδυαστεί με δεκτες με το πόσο χορό παίρνει μια μεταβλητή κλπ. Αυτα περιμενω σειρα!
@platisd
@platisd Жыл бұрын
⚠ Το expression `std::array<int, 10> dt = { 0 };` αρχικοποιεί μόνο το πρώτο στοιχείο του πίνακα `dt`. Τα υπόλοιπα στοιχεία του πίνακα γίνονται value initialized, δλδ `int{}` δλδ `0`. ⚠ Δλδ, αν αντί για `{ 0 }` (δλδ initializer list με ένα στοιχείο, το `0`) επέλεγες να γράψεις `{ 2 }` θα έβλεπες ένα πολύ διαφορετικό αποτέλεσμα όταν διάβαζες τον πίνακα. 😇 Ωραίο βίντεο κατά τα άλλα συνέχισε δυνατά! Θα προσέθετα/ξεκαθάριζα δύο πράγματα: 1. Η χρήση του subscript operator (τα `[ ]` δλδ), είτε σε `std::array` ή σε C-style array, δεν ελέγχει τα όρια του πίνακα και μπορεί να καταλήξει σε UB. Ο έλεγχος ορίων ενός `std::array` γίνεται μέσω της μεθόδου `at()`, π.χ. `dt.at(100)`. 2. Πάντα προτιμούμε STL containers έναντι C-style arrays (SL.con.1). Γενικότερα, εάν δε συντρέχουν εξωγενείς περιορισμοί, σε μοντέρνα C++ δεν υπάρχει λόγος να χρησιμοποιήσει κάποιος C-style arrays. EDIT: Τελικά δεν ήταν undefined behavior όπως ανέφερα αρχικά, ανανέωσα το σχόλιο με πιο σωστή εξήγηση.
@errandam6219
@errandam6219 Жыл бұрын
Απο που ορίσαμε οτι το token θα παιρνει μια λέξη καθε φορα απο το text;
@incalite
@incalite Жыл бұрын
Ο extraction operator κοιταει για whitespace και εξάγει bytes απο το stream ανάλογα το είδος της μεταβλητής.
@errandam6219
@errandam6219 Жыл бұрын
Μπορεις να κανεις στο μελλον ενα βιντεο να εξηγη πως δουλευουν τα extraction operator;
@badtrip858
@badtrip858 Жыл бұрын
@@errandam6219 Εαν εχεις χρησιμοποιησει ποτε σου το "cin" στη C++, που προκειται για την standard εισοδο, χρησιμοποιεις τον extraction operator ">>". Αυτο υποδηλωνει οτι οτιδηποτε υπαρχει στο buffer της standard input, θα περαστει σε οτιδηποτε βρισκεται στα δεξια του operator αυτου. Το πως βεβαια καθε αντικειμενο χρησιμοποιει τον extraction operator, εξαρταται απο το πως τον εχει υπεφορτωσει η καθε κλαση. Η υπερφορτωση των operators προκειται για την διαδικασια κατα την οποια μεσα στην κλαση ενος αντικειμενου οριζεις πως θα αντιδραει ενας operator οταν καλειται διπλα απο το αντικειμενο της κλασης. Μπορει λοιπον να εχει γινει υπερφορτωση του ">>" απο τη κλαση "stringstream" που εχει δημιουργησει το αντικειμενο "ss", και να εχει μεσα κωδικα (σαν συναρτηση φαντασου την υπεφορτωση, με δικο της κωδικα μεσα) που να τροποποιει τα δεδομενα του buffer καταλληλως ωστε να τα χωριζει και να τα περναει ενα προς ενα στο αντικειμενο που βρισκεται στα δεξια του operator ">>". Εαν θελεις να καταλαβεις περισσοτερο το θεμα, συνιστω να ψαχτεις σε βιντεο "Operator Overload C++".
@platisd
@platisd Жыл бұрын
Ωραίο βίντεο και ενδιαφέρουσα επιλογή για βίντεο. Εγώ κάνω copy-paste το ακόλουθο snippet κάθε φορά που θέλω κάτι τέτοιο: ``` std::vector<std::string> splitString(const std::string& input, char delimiter) { std::istringstream split{input}; std::vector<std::string> tokens{}; for (std::string token{}; std::getline(split, token, delimiter); tokens.emplace_back(token)) { // Optionally process the token before inserting it in the vector } return tokens; } ``` Βέβαια ο δικός σου τρόπος είναι σίγουρα πιο απλός στην κατανόηση! 😁
@incalite
@incalite Жыл бұрын
Αντίστοιχη λογική. Μου αρέσει! Θα το κλέψω να το χρησιμοποιώ και εγώ! 😄
@errandam6219
@errandam6219 Жыл бұрын
Καλησπέρα. Για να δημιουργίσεις Setters και Getters πρεπει να έχεις πρόσβοση στον πηγαίο κώδικα οποτε θα μπορούσες απλά να κανεις το age πχ public οπότε ποια η χρησημότητα τους; Αν ήθελα να κάνω κατι τέτοιο θα δοκίμαζα να χρησημοποιήσω pointer.
@incalite
@incalite Жыл бұрын
Αρχικά, ο λόγος που χρησιμοποιούμε private μεταβλητές είναι για να διασφαλίσουμε οτι οι τιμές των ιδιοτήτων δεν θα αλλάξουν από το λάθος σημείο την λάθος στιγμή. Έχοντας setters και getters λοιπόν, μπορούμε να κάνουμε πιο ελεγχόμενη την αλλαγή ή εμφάνιση των ιδιοτήτων κατά την χρήση τους. Στη περίπτωση που όλες οι ιδιότητες είναι public αυτό σημαίνει οτι μπορούν να αλλάξουν από οποιοδήποτε σημείο του κώδικα, με καλή πιθανότητα να σπάσει κάποια άλλη λογική που ίσως είναι βασισμένη στη τιμή ή κατάσταση που έχουν. Ο pointer απλά κοιτάει μια θέση μνήμης αλλά και αυτός μπορεί να είναι public ή private στη πρόσβαση :)
@errandam6219
@errandam6219 Жыл бұрын
usigned μεταβλητή τι είναι;
@incalite
@incalite Жыл бұрын
unsigned int πχ είναι ένας ακέραιος που δεν παίρνει αρνητικό πρόσημο
@errandam6219
@errandam6219 Жыл бұрын
ωραιο αυτο με τη συντόμευση του if δεν το ηξερα.
@errandam6219
@errandam6219 Жыл бұрын
Ωραιος μπρο συνεχισε έτσι. Επίσης να θυμάσαι οτί οι δομητές πάντα ενεργοποιούνται στην δημιουργία ενός αντικειμένου μιας κλάσης.
@incalite
@incalite Жыл бұрын
Ευχαριστώ πολυ!! Οι κατασκευαστές ενεργοποιουνται τη στιγμή που δημιουργείται το στιγμιότυπο μίας κλάσης αλλά το ποιος κατασκευαστής θα ενεργοποιηθεί εξαρτάται απο τις παραμέτρους που του περνάμε αν και εφόσον υπάρχουν πολλαπλοί 😀
@platisd
@platisd Жыл бұрын
Πολύ ωραία η γραφική παρουσίαση των 2 διαστάσεων! 💯 Στος πολυδιάστατους πίνακες είναι πολύ χρήσιμο και το ranged-for εάν δε χρειαζόμαστε το index. 💡
@incalite
@incalite Жыл бұрын
Πολύ ενδιαφέρον! Δεν το έχω δοκιμάσει με range-based. Αν ήθελα να εμφανίσω τα στοιχεία εφόσον δεν με νοιάζει ο index, θα ήταν μια καλή εναλλακτική. Thanks!! Θα το εφαρμόσω!
@platisd
@platisd Жыл бұрын
Ωραίο βίντεο! Μια συμπλήρωση μόνο επειδή πάρα πολύ συχνά βλέπω αρχάριους να μπερδεύονται με αυτό: Όσον αφορά τη γλώσσα, το struct και το class διαφέρουν μόνο στο default visibility των μελών τους και σε τίποτα άλλο. Τι σημαίνει αυτό; Ένα class με όλα τα μέλη ορισμένα ως public είναι ακριβώς το ίδιο με ένα struct χωρίς κάποια καθορισμένη ορατότητα από εμάς. Παρομοίως, ένα struct με όλα τα μέλη του private είναι αντίστοιχο με ένα class χωρίς καθορισμένη ορατότητα από εμάς. Από εκεί και πέρα, το κάθε project ή προγραμματιστής μπορεί να χρησιμοποιήσει τις δικές του συμβάσεις, π.χ. χρησιμοποιούμε struct για οντότητες που έχουν όλα τα μέλη τους public και δεν έχουν constructor.
@sergiospavlostathis8402
@sergiospavlostathis8402 Жыл бұрын
Γεια σου φίλε! Εμείς στο πολυτεχνείο (μηχανολόγοι μηχανικοί) χρησιμοποιούμε γλώσσα προγραμματισμού C , όχι C++. Πιστεύεις ότι η C++ είναι καλύτερη ;
@incalite
@incalite Жыл бұрын
Γεια χαρά φιλε! Δεν είναι σωστό να πούμε ότι μία γλώσσα είναι καλύτερη απο μία άλλη. Η C++ πάτησε πάνω στη C δίνοντας πιο αποτελεσματικά την δυνατότητα της αφαίρεσης (abstraction) με την χρήση των αντικειμένων, κλάσεων, templates κλπ. Η C δεν παρέχει τέτοιες δυνατότητες. Στους ηλεκτρολόγους, επειδή εξετάζουμε σε βάθος την αρχιτεκτονική, το υλικό και την μνήμη, απλά διδάσκεται η C χωρίς να αποτρέπεται η δυνατότητα να χρησιμοποιήσουμε δομές της και στη C++. Εξαρτάται καθαρά από το τι θες να κάνεις και από το πώς θα κάνεις τον σχεδιασμό. Αν προγραμματίζεις ενσωματωμένο, θα χρειαστείς δομές της C. Αν ωστόσο προγραμματίζεις κάτι πιο high level αλλά δεν θες να χάσεις και την ενοποίηση με το υλικό, χρησιμοποιείς C++.
@sergiospavlostathis8402
@sergiospavlostathis8402 Жыл бұрын
@@incalite Κατάλαβα, τώρα μου έγινε πιο κατανοητό για αυτό είχα την απορία την συγκεκριμένη. Σε ευχαριστώ πάρα πολύ. Καλή συνέχεια να έχεις!
@incalite
@incalite Жыл бұрын
Καλή συνέχεια και σε σένα φίλε, χαίρομαι που βοήθησα! 😁
@tatsinis0
@tatsinis0 Жыл бұрын
Ξεκινάω φέτος 2ο έτος πληροφορική και μπαίνω πρώτη φορα στη c++, μαζί σου θα την βγάλω την χρονιά φίλε😂🙏
@incalite
@incalite Жыл бұрын
Σε καταλαβαίνω απόλυτα και είναι και ένας από τους λόγους που φτιάχνω τα βιντεάκια! 😄