1 תכנות מונחה עצמים ופיתוח משחקים תשע"ז הספרייה הסטנדרטית - סקירה (Standard template library - overview) 1
2 מבוא אוסף של ואחיד קיים קבצים המכילים שירותים בכל שירותים ייחודיים הסטנדרטית. קומפיילר ניתנים כלליים. ופלטפורמה של ++C. ספריות ע"י קיימים ולא ייחודיות בספריה הספרייה ממומשת בדגש תחילה פותחה כספרייה סטנדרטית מובנת. יעילות. על צורפה יותר מאוחר ורק נפרדת כספרייה הספרייה מאפשרת פחות קוד פחות זמן באגים ריצה טוב פיתוח פשוט פיתוח מהיר יותר ויעיל. יותר + תחזוקה משופרת
3 תוכן הספרייה מבני נתונים בסיסיים.)containers( עטיפות למבני הנתונים הבסיסיים.)adaptors( איטרטורים למבני הנתונים. אלגוריתמים כלליים. שרותי קלט/פלט. שירותים להקצאת זיכרון דינאמי. שירותים לפעולות נומריות בסיסיות. מחרוזות. שירותים נוספים localization,..(.)exceptions, chrono, thread,
4 קבצי הספרייה קבצי ההצהרה של הספרייה הן ללא סיומת )בדומה ל-.)iostream סיומת h.* מתייחסת לגרסאות ישנות של השפה שלעיתים שונות מהספרייה הסטנדרטית.)math.h( תחילית *c מתייחסת לספריות של C שנכללות בספרייה הסטנדרטית.)ctime( קישור: C++ Standard Library header files המחלקות, האובייקטים, והפונקציות של הספרייה נמצאים במרחב השם.std קישורים לתיעוד הספרייה: C++ reference Online C++ Language Tutorial Online documentation for STL by SGI
5 המחלקה string מימוש של מחלקת מחרוזת בסגנון מונחה עצמים. מחליפה את הספרייה.string.h, cstring פעולות: בניה והריסה, איטרטורים, פעולות קיבולת, פעולות גישה, פעולות שונות על מחרוזת. קישור למחלקת.string
6 - דוגמא המחלקה string #include <iostream> #include <string> int main() { std::string str1("hi there"); std::string str2 = str1 + "! "; str2 += "Whats up?"; std::cout << "str1: " << str1 << std::endl; std::cout << "str2: " << str2 << std::endl; if (str1 > str2) std::cout << "str1 is bigger than str2" << std:: endl; else std::cout << "str2 is bigger than str1" << std::endl; str2[0] = 'M'; std::cout << "new str2: " << str2 << std::endl; std::cout << "The length of str1 is: " << str1.length() << std::endl; }
7 מבני נתונים )containers( vector list deque (Double Ended Queue) מבני נתונים סדרתיים: set multiset map multimap מבני נתונים קבוצתיים )אסוציאטיביים(:
8 מבני נתונים )containers( מבני נתונים קבוצתיים )אסוציאטיביים( לא סדורים: unordered_set unordered_multiset unordered_map unordered_multimap עטיפות :)adaptors( stack queue priority_queue
9 מבני נתונים - המשך vector, list, deque map, set, unordered_map, unordered_set queue, stack begin, end, size, empty, clear, erase ==,!=, <, >, = קבצי ההצהרה של מבני הנתונים: רשימה של פונקציות חשובות : push_back, push_front, pop_back, pop_front, front, back, insert, erase, implace [], at מבני הנתונים שומרים על ממשק דומה ולכן ניתן לכתוב קוד כללי.
10 מבני נתונים - דוגמא #include <iostream> #include <vector> #include <list> #include <deque> template < class T, class Container > void pushmany( Container& c, T& val, int n ) { for (int i=0; i<n; i++ ) c.push_back(val); } int main() { std::vector<int> v; std::list<double> l; std::deque<char> d; int ival = 7; double dval = 8.5; char cval = 'm'; } pushmany(v,ival,10); pushmany(l,dval,12); pushmany(d,cval,5);
11 איטרטורים מאפשרים מעבר סדרתי על מבנה הנתונים. כל מבני הנתונים הישירים מספקים איטרטורים )העטיפות לא מספקות(. איטרטורים יספקו כל שירות שניתן לממש באופן יעיל. פעולות משותפות לכל האיטרטורים: *, ++,,begin().end() סוג נוסף של איטרטורים: מעבר על זרם קלט/פלט. דוגמא 05_21.
12 input: ++ (pre, post), * (r-value), =, ==,!= output: ++ (pre, post), * (l-value), = forward: all previous operators איטרטורים - קטגוריות bidirectional: all previous operators, -- (pre, post) random access: all previous operators, [], -, +, -=, +=, <, >, <=, >= היררכית עוצמת האיטרטורים מהמועטה לרבה: input output forward bidirectional random access
13 איטרטורים - קטגוריות קישור למקור
14 איטרטורים קטגוריות )המשך( random access: bidirectional: forward: non: קטגורית האיטרטור של כל אחד ממבני הנתונים: vector, deque list, set, multiset, map, multimap unordered_set, unordered_multiset, unordered_map, unordered_multimap stack, queue, priority_queue כל מבנה נתונים מכיל כמה סוגים של איטרטורים את כל הסוגים(: )לא כל מבנה יכיל iterator const_iterator reverse_iterator const_ reverse_iterator דוגמא
15 אלגוריתמים הספרייה מספקת אלגוריתמים בסיסיים הפועלים בצורה גנרית על מבני הנתונים. הספרייה מכילה עשרות )מעל 100( מחיקה, חיפוש, מיון, וכדומה. אלגוריתמים בסיסיים: הוספה, האלגוריתמים משתמשים אך ורק באיטרטורים וכלל לא מסתמכים על מבני הנתונים. ההפרדה הזו מאפשרת כתיבה של אלגוריתמים גנריים ביחס למבני נתונים רבים. אלגוריתמים איטרטורים מבני נתונים
16 אלגוריתמים )המשך( יעילות: האלגוריתמים ימומשו באופן יעיל, תוך שימוש בשירותי האיטרטורים הממומשים באופן יעיל. הספרייה מאפשרת הרחבות נוחות של מבני נתונים חדשים ושל אלגוריתמים חדשים. רשימת אלגוריתמים דוגמא
17 אלגוריתמים - דוגמא #include <iostream> #include <deque> #include <algorithm> int main() { std::deque<double> d; d.push_front(2.2); d.push_back(2.3); d.push_back(2.4); d.push_back(2.3); } std::replace( d.begin(), d.end(), 2.3, 2.4 ); std::cout << std::count( d.begin(), d.end(), 2.4 ) << std::endl;
Adapters - Stack 18
19 (כדוגמא) Stack member function
Adapters - queue 20
Adapters priority queue 21