עבור לתוכן

עזרה קטנה ב C++, הדפסת רכיבי וקטור

Featured Replies

פורסם

ערב טוב,

יש לי וקטור שמוגדר ככה :

typedef std::vector<Dish*> box;

ובשדה המחלקה מופיעה :

std::vector<box> m_dishBoxes

Dish* זהו מצביע לטיפוס מחלקה שהוגדר אצלי בתוכנית.

השאלה שלי היא בהנחה שבכל אובייקט שנוצר ישנה פונקציית הדפסה, איך אני יכול למעשה לעבור על כל האיברים שמופיעים בוקטור m_dishBoxes?

כאשר עליי להקפיד על החלוקה המתאימה, זאת אומרת במקום הראשון במשתנה הנ"ל מופיעים אובייקטים (מצביעים לאובייקטים) מאותו סוג ועלי להדפיס את כולם קודם, במקום השני אובייקטים מסוג אחרי ועלי להדפיס הנתונים שלהם וכך הלאה..

תודה רבה מראש על העזרה.

פורסם

אה... באמצעות לולאה מקוננת?

זה ממש פשוט, או שלא הבנתי מה אתה רוצה לעשות.

פורסם
  • מחבר

הכוונה שלי הייתה כמו שב C למשל אם יש מערך דו מימדי אז עושים לולאה בתוך לולאה שעוברת על כל התאים.

העניין שאני לא בטוח איך עושים את הלולאה הפנימית כאשר מדובר על וקטורים. הלולאה החיצונית כמובן שתרוץ מכתובת האיבר הראשון ועד כתובת האיבר האחרון אבל כל כתובת פה מצביעה על וקטור אחר, איך אני יכול לדעת את גודלם של הוקטורים הפנימיים כביכול ולכתוב את הלולאה הפנימית בהתאם?

פורסם
  • מחבר

תודה על ההתייחסות של שניכם.

אני טיפה מסתבך משום מה עם הסינטקס, רציתי לדעת אם הקוד הבא הוא חוקי:

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();
}
}
}

פורסם

קומפילציה הקוד שלך לא יעבור

בכל מקרה זה אמור להיות משהוא כזה:


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

פורסם
  • מחבר

הבנתי תודה. אני אכניס את זה ותוכנית ואבדוק.

פורסם

corona1987, שים לב שבמקום זה:

std::vector<box> const iterator iter1

אתה צריך לעשות ככה:

std::vector<box>::const_iterator iter1

const_iterator הוא השם המלא של הטיפוס (ה-const הוא חלק מהשם), והוא תת-טיפוס של <std::vector<box.

פורסם

מי אתה? :o

פורסם
  • מחבר

מי אתה? :o

שאלת אותי?

פורסם

כן, כי מסתבר שאנחנו לומדים באותה פקולטה, באותו סמסמטר ואת אותו קורס... (אלא אם כן אתה חוזר עליו או משהו).

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים