וקטורים ב C++

לילי22

New member
וקטורים ב C++

בוקר טוב! הכנסתי string לתוך וקטור ואני רוצה לשלוף את הstring חזרה. מישהו יכול בבקשה להגיד לי איך עושים את זה??
 

vinney

Well-known member
עם iterator

או עם אינדקס, אם את יודעת את האינדקס של הסטרינג בוקטור. למשל, אם הכנסת עם push_back, אז הפונקציה end תחזיר איטרטור לstring שהכנסת.
 

לילי22

New member
אבל...

איטרטור זה לא מסוג string למיטב ידיעתי (ותקן אותי אם אני טועה...) אז איך הופכים אותו לstring?
 

vinney

Well-known member
זה כמו מצביע ל

איטרטור מצביע על האובייקט בתוך הווקטור.
 

אמיר ט

New member
איטרציה על ווקטור

מאד פשוט וקל, הנה דוגמא :
vector<string> vecStrings; vecStrings.push_back( string("Hello") ); vecStrings.push_back( string("World") ); vecStrings.push_back( string("Again") ); vector<string>::iterator myIterator; for( myIterator = vecStrings.begin(); myIterator != vecStrings.end(); myIterator++ ) { cout << (*myIterator).c_str() << endl; }​
 

vinney

Well-known member
זה הרגל מאוד לא בריא

לגשת ל c_str cout << *myiterator זה מספיק לחלוטין, myiterator* במקרה הזה יעבור casting ל string, ולstring יש אופרטור >>. לא כדאי לגשת לmembers שלו שלא לצורך.
 

vinney

Well-known member
כי במקרה של string למשל

גישה ל c_str (שהוא מורש מbasic_string::c_str) מונעת גישה לאופרטור >> שיכול להיות שעושה משהו שונה. במקרה הספציפי אומנם התוצאה זהה, אבל אפשר בקלות להתרגל לגשת ישירות לנתון הגולמי שהמחלקה מייצגת, ולפספס הרבה overloadים שהמחלקה הזאת מביאה איתה. עקרונית, שימוש ב basic type ב CPP (שזה לצורך העניין ה c_str) לא מומלץ, אם הנתון בה בצורה של אובייקט ממחלקה מסוימת. זה פשוט מפספס את כל המטרה בלהשתמש במחלקה.
 
למעלה