Menu
Coddy logo textTech

C++ Cheat Sheet: דף עזר מהיר

עודכן לאחרונה

Hello World ומבנה התוכנית

הריצה מתחילה ב-main, שמחזירה int.

רכיבקוד
הכללת קובץ כותרת#include <iostream>
נקודת כניסהint main() { ... }
הדפסת שורהstd::cout << "Hello, World!" << std::endl;
קריאת קלטstd::cin >> x;
שימוש ב-namespace stdusing namespace std;
החזרת הצלחהreturn 0;
הערות// line ו-/* block */

טיפוסי נתונים

טיפוסתיאור
intמספר שלם (בדרך כלל 32 ביט)
long / long longמספרים שלמים רחבים יותר
float / doubleמספרים בנקודה צפה
charבייט / תו יחיד
booltrue או false
std::stringטקסט דינמי מתוך <string>
autoהקומפיילר מסיק את הטיפוס
std::size_tטיפוס ללא סימן לגדלים ולאינדקסים

משתנים ורפרנסים

רפרנסים הם כינויים; מצביעים מחזיקים כתובות.

פעולהתחביר
הצהרה ואתחולint x = 5;
אתחול בסוגריים מסולסליםint x{5};
קבועconst double PI = 3.14159;
קבוע בזמן קומפילציהconstexpr int N = 10;
רפרנס (כינוי)int &r = x;
מצביעint *p = &x;
גישה דרך מצביע*p = 10;
הסקת טיפוסauto y = 3.14;

בקרת זרימה

משפטתחביר
If / elseif (x > 0) { ... } else { ... }
Switchswitch (n) { case 1: ...; break; default: ...; }
לולאת whilewhile (i < n) { ... }
לולאת do-whiledo { ... } while (i < n);
לולאת forfor (int i = 0; i < n; i++) { ... }
for מבוסס טווחfor (auto x : vec) { ... }
for מבוסס טווח ברפרנסfor (auto &x : vec) { ... }
Break / continuebreak; יוצא מהלולאה, continue; מדלג לאיטרציה הבאה

פונקציות

פעולהתחביר
הגדרת פונקציהint add(int a, int b) { return a + b; }
ללא ערך החזרהvoid greet() { ... }
ארגומנטים עם ערך ברירת מחדלint pow(int b, int e = 2) { ... }
העברה ברפרנסvoid inc(int &x) { x++; }
רפרנס const (בלי העתקה)void print(const std::string &s) { ... }
העמסה (Overloading)int max(int a, int b); ו-double max(double a, double b);
Lambdaauto f = [](int x) { return x * 2; };
Lambda עם captureauto g = [n](int x) { return x + n; };

מחלקות ו-OOP

פעולהתחביר
הגדרת מחלקהclass Dog { ... };
מגדירי גישהpublic:, private:, protected:
משתנה מחלקהstd::string name;
בנאיDog(std::string n) : name(n) {}
הורס (Destructor)~Dog() { ... }
פונקציה חברהvoid bark() { ... }
יצירת אובייקטDog d("Rex");
ירושהclass Puppy : public Dog { ... };
פונקציה וירטואליתvirtual void speak();

קונטיינרים של STL

קונטיינרים נפוצים מהספרייה הסטנדרטית.

קונטיינרשימוש ודוגמה
std::vector<int>מערך דינמי: v.push_back(1); v.size();
std::stringטקסט: s += "!"; s.length();
std::array<int, 3>מערך בגודל קבוע עם מידע על הגבולות
std::map<K, V>מפתח-ערך ממוין: m["a"] = 1;
std::unordered_map<K, V>טבלת גיבוב (חיפוש מהיר יותר, בלי סדר)
std::set<T>ערכים ייחודיים ממוינים: s.insert(5);
std::pair<A, B>שני ערכים: make_pair(1, "x")
std::queue / std::stackמתאמים של תור FIFO / מחסנית LIFO

אלגוריתמים ואיטרטורים של STL

מתוך <algorithm>; רובם מקבלים טווח איטרטורים begin/end.

פעולהתחביר
איטרטורי התחלה / סוףv.begin(), v.end()
מיוןstd::sort(v.begin(), v.end());
מיון בסדר יורדstd::sort(v.begin(), v.end(), std::greater<int>());
חיפוש ערךauto it = std::find(v.begin(), v.end(), 5);
ספירת התאמותstd::count(v.begin(), v.end(), 5);
האיבר המינימלי / המקסימליstd::max_element(v.begin(), v.end());
סכום של טווחstd::accumulate(v.begin(), v.end(), 0);
שינוי כל איברstd::transform(v.begin(), v.end(), v.begin(), fn);

Smart pointers ו-C++ מודרני

העדיפו smart pointers על פני new/delete גולמיים לניקוי אוטומטי.

יכולתתחביר
בעלות ייחודיתauto p = std::make_unique<Dog>("Rex");
בעלות משותפתauto p = std::make_shared<Dog>("Rex");
רפרנס ללא בעלותstd::weak_ptr<Dog> w = p;
סמנטיקת העברה (Move)auto v2 = std::move(v1);
Nullptrint *p = nullptr;
Structured bindingsauto [key, val] = *it;
ערך אופציונליstd::optional<int> maybe;
תבניות (Templates)template <typename T> T add(T a, T b) { return a + b; }

התחביר, הקונטיינרים של STL והיכולות המודרניות של C++ שהכי שימושיים, בעמוד אחד. ה-C++ cheat sheet הזה הוא דף עזר מהיר לכתיבת C++: טיפוסי הנתונים, רפרנסים, מחלקות, הקונטיינרים של הספרייה הסטנדרטית כמו vector ו-unordered_map, וה-smart pointers שמחליפים את new/delete הגולמיים.

כל מה שכאן הוא C++ סטנדרטי (C++11 ואילך) ומתקמפל עם g++ או clang++. העתיקו את מה שצריך, או נסו כל קטע קוד בזמן אמת בעורך האונליין של C++, בלי להתקין קומפיילר. לומדים את השפה? קורס C++ האינטראקטיבי והחינמי של Coddy מלמד מצביעים, STL ומחלקות צעד אחר צעד.

שאלות נפוצות על ה-C++ cheat sheet

האם ה-C++ cheat sheet הזה בחינם?
כן. ה-C++ cheat sheet הזה חינמי לגמרי, בלי צורך בהרשמה. שמרו אותו במועדפים וחזרו אליו בכל פעם שצריך לבדוק תחביר, קונטיינר של STL או smart pointer.
מה ההבדל בין מצביע לרפרנס ב-C++?
מצביע הוא משתנה שמחזיק כתובת; הוא יכול להיות null, אפשר להפנות אותו למקום אחר, וניגשים דרכו לערך עם *p. רפרנס (int &r = x) הוא כינוי למשתנה קיים: חייבים לקשור אותו כבר בהצהרה, הוא אף פעם לא יכול להיות null או להיקשר מחדש, ומשתמשים בו כמו במשתנה עצמו. השתמשו ברפרנסים לפרמטרים נקיים יותר שמועברים ברפרנס, ובמצביעים כשצריך הפניה אופציונלית או כזו שאפשר לשנות.
כדאי להשתמש ב-new/delete או ב-smart pointers?
העדיפו smart pointers. std::unique_ptr ו-std::shared_ptr (דרך make_unique/make_shared) משחררים את הזיכרון שלהם אוטומטית כשהם יוצאים מה-scope, וכך מונעים את הדליפות והשחרורים הכפולים שמגיעים עם new/delete ידניים. השתמשו ב-new/delete גולמיים רק בקוד low-level שיש לו סיבה מוגדרת לכך.
אפשר לתרגל C++ אונליין?
כן. פתחו את עורך האונליין של C++ כדי לקמפל ולהריץ כל קטע קוד מדף העזר הזה בדפדפן, בלי להתקין קומפיילר. כשתרצו מסגרת מסודרת, קורס C++ האינטראקטיבי והחינמי של Coddy לוקח אתכם צעד אחר צעד ממשתנים ולולאות ועד מחלקות ו-STL.
האם דף העזר הזה מתאים למתחילים?
כן. הוא מסודר מאבני הבניין הנפוצות ביותר (טיפוסים, בקרת זרימה, פונקציות) ועד המתקדמות (STL ו-smart pointers), כך שאפשר להשתמש בחלקים העליונים כבר מהיום הראשון ולהתקדם לשאר בהמשך.
איור של שפות התכנות ב-Coddy

ללמוד C++ עם Coddy

להתחיל