שינוי אלגוריתמים
שיעור 21 מתוך 23 בקורס C++ - ספריית התבניות הסטנדרטית של Coddy.
בשיעור הזה תלמדו על שינוי אלגוריתמים הקיימים בספריית ה־STL של C++.
אלגוריתמים משנים נועדו לשנות את הערכים של האיברים בתוך מיכל.
נעסוק באלגוריתמים הבאים:
copy()fill()move()swap()reverse()
השיטה copy()
השיטה copy() מעתיקה את האיברים מהטווח שמוגדר על ידי שני איטרטורים אל הטווח שמתחיל באיטרטור השלישי
vector<int> v1 = {1, 2, 3};
vector<int> v2;
copy(v1.begin(), v1.end(), v2.begin());
for(auto value : v1)
cout << value << " ";Output:
1 2 3השתמשנו בשיטה copy() כדי להעתיק את התוכן של הווקטור v1 לווקטור v2.
השיטה fill()
השיטה הזאת משייכת ערך נתון לכל איבר בטווח הנתון, שמוגדר על ידי שני איטרטורים.
vector<int> numbers(10); // יוצר וקטור ריק עם 10 איברים
fill(numbers.begin(), numbers.end(), 1);
for(auto value : numbers)
cout << value << " ";
cout << endl;
fill(numbers.begin(), numbers.end() - 3, 2);
for(auto value : numbers)
cout << value << " ";Output:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 1 1 1השיטה move()
השיטה הזאת מעבירה את האיברים מהמיכל הנוכחי ומחזירה את ערך ה־rvalue שלו.
vector<string> names;
string first = "John";
string second = "Max";
names.push_back(first);
names.push_back(move(second));
cout << first << endl;
cout << second << endl;
cout << names[1];Output:
John
Maxכפי שאפשר לראות, השיטה move() מרוקנת את המחרוזת, אך מחזירה את הערך שלה, והשיטה push_back() מכניסה את הערך לווקטור.
השיטה swap()
השיטה הזאת מחליפה בין האיברים של שני מיכלים מאותו סוג.
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";
cout << endl;
swap(v1, v2);
for(auto value : v1)
cout << value << " ";
for(auto value : v2)
cout << value << " ";Output:
1 2 3 4 5 6
4 5 6 1 2 3השיטה reverse()
השיטה הזאת הופכת את הסדר של איברי מיכל אחד, וליתר דיוק, של האיברים בטווח שמוגדר על ידי שני האיטרטורים.
vector<int> a = {1, 2, 3, 4, 5};
for(auto value : a)
cout << value << " ";
cout << endl;
reverse(a.begin(), a.end());
for(auto value : a)
cout << value << " ";Output:
1 2 3 4 5
5 4 3 2 1
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
כל השיעורים ביחידה C++ - ספריית התבניות הסטנדרטית
תרגלו בעצמכם: קומפיילר C++ אונליין