פורסם 2009 ביוני 1516 שנים ערב טוב,יש לי וקטור שמוגדר ככה :typedef std::vector<Dish*> box;ובשדה המחלקה מופיעה : std::vector<box> m_dishBoxesDish* זהו מצביע לטיפוס מחלקה שהוגדר אצלי בתוכנית.השאלה שלי היא בהנחה שבכל אובייקט שנוצר ישנה פונקציית הדפסה, איך אני יכול למעשה לעבור על כל האיברים שמופיעים בוקטור m_dishBoxes?כאשר עליי להקפיד על החלוקה המתאימה, זאת אומרת במקום הראשון במשתנה הנ"ל מופיעים אובייקטים (מצביעים לאובייקטים) מאותו סוג ועלי להדפיס את כולם קודם, במקום השני אובייקטים מסוג אחרי ועלי להדפיס הנתונים שלהם וכך הלאה..תודה רבה מראש על העזרה.
פורסם 2009 ביוני 1516 שנים מחבר הכוונה שלי הייתה כמו שב C למשל אם יש מערך דו מימדי אז עושים לולאה בתוך לולאה שעוברת על כל התאים.העניין שאני לא בטוח איך עושים את הלולאה הפנימית כאשר מדובר על וקטורים. הלולאה החיצונית כמובן שתרוץ מכתובת האיבר הראשון ועד כתובת האיבר האחרון אבל כל כתובת פה מצביעה על וקטור אחר, איך אני יכול לדעת את גודלם של הוקטורים הפנימיים כביכול ולכתוב את הלולאה הפנימית בהתאם?
פורסם 2009 ביוני 1516 שנים vector::size() נותנת לך את גודל הווקטור.http://www.cplusplus.com/reference/stl/vector/
פורסם 2009 ביוני 1516 שנים לחילופין, תשתמש באיטרטורים.http://www.cplusplus.com/reference/stl/vector/begin
פורסם 2009 ביוני 1616 שנים מחבר תודה על ההתייחסות של שניכם.אני טיפה מסתבך משום מה עם הסינטקס, רציתי לדעת אם הקוד הבא הוא חוקי:if ( m_dishBoxes.empty() == false ) { for ( std::vector<box> const iterator iter1 = m_dishBoxes.begin(); iter1 != m_dishBoxes.end(); iter1++ ) { std::cout << snewbox << std::endl; for ( int i=0; i <= (*iter1).size; i++ ) { (*iter1)[i]->print(); } } }
פורסם 2009 ביוני 1616 שנים קומפילציה הקוד שלך לא יעבורבכל מקרה זה אמור להיות משהוא כזה:typedef std::vector<Dish *>::iterator DishIterator;typedef std::vector<box>::iterator BoxIterator;for(BoxIterator boxIt = m_dishBoxes.begin(); boxIt != m_dishBoxes.end(); ++boxIt){ //do what needed with box for(DishIterator dishIt = boxIt->begin(); dishIt != boxIt->end(); ++dishIt){ //do what needed with dish here }}אני מקווה שזה יעבור קומפילציה לא בדקתי. (לצורך שיפור יעליות מומלץ להוציא את הקריא ל end() של כל ווקטור מחוץ ללולאה)אם הפונקציה מוגדרת כ CONST אז צריך להישתמש ב const_iterator
פורסם 2009 ביוני 1616 שנים corona1987, שים לב שבמקום זה:std::vector<box> const iterator iter1אתה צריך לעשות ככה:std::vector<box>::const_iterator iter1const_iterator הוא השם המלא של הטיפוס (ה-const הוא חלק מהשם), והוא תת-טיפוס של <std::vector<box.
פורסם 2009 ביוני 1816 שנים כן, כי מסתבר שאנחנו לומדים באותה פקולטה, באותו סמסמטר ואת אותו קורס... (אלא אם כן אתה חוזר עליו או משהו).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.