STL containers

voguemaster

New member
STL containers

זכור לי שהיה פה פעם שירשור על STL ועל האלגוריתמים שלה. זכור לי בייחוד על אלגוריתם של הסרה מתוך container ועל התנהגות מוזרה שזה עושה. אלדד, אתה וכר על מה מדובר ? דיברנו על זה לא מעט במסנג'ר...
 

DadleFish

New member
הנה מה שאני זוכר.

1. האלגוריתם "remove" ב-STL לא משנה את גודל ה-container. אם יש לך רשימה שנראית ככה:
1 2 3 4 5​
ותעשה :
remove(lst.begin(), lst.end(), 3)​
אז תקבל:
1 2 4 5 5​
את הבעיה הזו ניתן לפתור על ידי הפעלת erase שפועל בין התוצאה של ה-remove (מוחזר לך איטרטור שמצביע ל-end החדש) לבין ה-()lst.end. 2. קח את הדוגמה הבאה:
list<int> lst; lst.push_back(1); lst.push_back(2); lst.push_back(3); lst.push_back(4); list<int>::iterator i; for (i = lst.begin(); i != lst.end(); ++i) { if (*i == 3) { lst.erase(i); } }​
מן הסתם השיטה הזו לא ממש תעבוד. הפתרון במקרה הזה הוא לעשות את מה שעשיתי ב-1, משהו כזה -
lst.erase(remove(lst.begin(),lst.end(),3), lst.end());​
זה מה שאני זוכר בשליפה. יכולות להיות עוד בעיות. שווה לקרוא את הספר של JOSUTTIS על הספריה הסטנדרטית של ++C.
 
למעלה