k-o-b-y פורסם 2007 ביולי 3 Share פורסם 2007 ביולי 3 שלום לכולםאני עובד כרגע על תוכנה (ב c++) שבה יש לי מחלקה שמקבלת את סוג ה container כטיפוס ב template:template <class Cont> class MyClass{ //..}כשה container הוא מה STL ותמיד של מחרוזות.במחלקה יש לי פוקציה שמחזירה iterator לפי אינדקס:template <class Cont> typename Cont::const_iterator MyClass<Cont>::GetIteratorOf(const Cont& c, int i){ Cont::const_iterator iter = c.begin(); while ((i-- > 0) && iter != c.end() ++iter; return iter;}אני רוצה לעשות specialization עבור vector של מחרוזות כך שלא יעבור בלולאה אלא יבצע גישה בעזרת האינדקס. השאלה שלי היא איך אני יוצר iterator עבור איבר מסויים ב vector כך שאני אהיה בטוח שלא מתבצעת שום לולאה?אני עובד עם VS2005. תודה קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2007 ביולי 3 Share פורסם 2007 ביולי 3 אני לא בטוח, אבל נראה לי שאתה יכול לממש את זה ככה:template <> typename vector::const_iterator MyClass<vector>::GetIteratorOf(const vector& c, int i){ vector::const_iterator iter = c.begin(); iter += i; return iter;}(סלח לי אם יש לי טעות ב-syntax של ה-specialization)יכול להיות שזה יעבוד גם עבור קונטיינרים אחרים. קישור לתוכן שתף באתרים אחרים More sharing options...
nirt פורסם 2007 ביולי 3 Share פורסם 2007 ביולי 3 בוקטור אתה יכול פשוט לבצע את זה בשביל לקבל תוכן של תא c[i]אם הבנתי נכון את השאלה שלך... קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2007 ביולי 3 Share פורסם 2007 ביולי 3 הבעיה היא שc[i] לא מחזיר איטרטור, אלא את התוכן של התא - ולכן זה לא יעבוד. קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2007 ביולי 3 מחבר Share פורסם 2007 ביולי 3 בדקתי והאופרטור += מוגדר רק עבור random access iterators. זה יעבוד עבור ה vector.תודה! קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2007 ביולי 4 Share פורסם 2007 ביולי 4 יש את אלגוריתם STL שנקרא advance. למיטב זכרוני (אין לי רפרנס מולי):iteratorOfIndexN = v.begin();std::advance( iteratorOfIndexN, n ); קישור לתוכן שתף באתרים אחרים More sharing options...
k-o-b-y פורסם 2007 ביולי 4 מחבר Share פורסם 2007 ביולי 4 צודק, שכחתי ממנו. בדקתי גם לגבי המימוש שלו ועבור iterator שהוא random access נעשה שימוש באופרטור += ככה שהוא מתאים לי בדיוק.תודה קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.