האם C++ טובה למבני נתונים ואלגוריתמים?
זו הבחירה הנפוצה ביותר בתכנות תחרותי ובחירה חזקה לראיונות: מהירה, עם ספרייה סטנדרטית שמכסה כמעט כל מבנה שתצטרכו. המחיר הוא יותר קוד ויותר דרכים לטעות, ממצביעים תלויים ועד איטרטורים שאיבדו תוקף. לבנות את המבנים בעצמכם קודם, כמו שהמסלול הזה עושה, זו הדרך שבה הדברים האלה מפסיקים להפתיע.
איזה container של ה־STL מתאים לאיזה מבנה נתונים?
std::vector הוא מערך דינמי, std::stack ו־std::queue הם מתאמים מעל std::deque כברירת מחדל, std::list היא רשימה מקושרת דו־כיוונית, std::unordered_map ו־std::unordered_set הם טבלאות גיבוב, std::priority_queue היא ערימה בינארית (ערימת מקסימום כברירת מחדל, בשונה מזו של Python ושל Java), ו־std::map ו־std::set הם עצי חיפוש בינאריים מאוזנים, בפועל עצים אדומים־שחורים. אין container לעץ trie או לגרף; אותם כותבים בעצמכם.
כדאי לממש מבני נתונים בעצמי או פשוט להשתמש ב־STL?
גם וגם, בסדר הזה. ממשו כל מבנה פעם אחת, כדי שתדעו למה חיפוש ב־std::unordered_map לוקח זמן קבוע בממוצע ולמה std::map שומר את המפתחות שלו ממוינים, ואחר כך השתמשו ב־STL בכל מקום. בתחרות או בראיון אף אחד לא מצפה לעץ אדום־שחור שנכתב ביד; מצפים שתבחרו את ה־container הנכון ותדעו מה הוא עולה.
C++ או Python ל־DSA?
C++ אם אתם מתכננים תכנות תחרותי או ראיון שבו מצפים לה; Python אם אתם רוצים את הדרך הקצרה ביותר מרעיון לקוד שעובד. האלגוריתמים זהים, ולכן הרבה אנשים לומדים באחת ומתחרים בשנייה. כל קורס מבני נתונים במסלול הזה נלמד בשתיהן.
אילו קורסים במסלול הזה לא נלמדים ב־C++?
שניים: תכנות דינמי וסדרת הראיונות של Python, שניהם נלמדים ב־Python. הם מופיעים אחרי השלבים, עם קישור שפותח אותם ב־Python. הרעיונות עוברים בלי שינוי: ב־C++, טבלת memo היא std::vector או std::unordered_map.
האם צריך לדעת C++ לפני שמתחילים את המסלול?
מחלקות, מצביעים, הפניות ו־std::vector, לכל הפחות. אם הם חדשים לכם, קורס C++ של Coddy מכסה אותם קודם, בחינם, והמסלול הזה ממשיך מהמקום שבו הוא מסתיים.