עזרה קטנה ב C++, הדפסת רכיבי וקטור - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


roma4k

Recommended Posts

ערב טוב,

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

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.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...