Menu
Coddy logo textTech

שינוי אלגוריתמים

שיעור 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++ אונליין