פורסם 2007 ביולי 318 שנים שלום לכולםאני עובד כרגע על תוכנה (ב 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. תודה
פורסם 2007 ביולי 318 שנים אני לא בטוח, אבל נראה לי שאתה יכול לממש את זה ככה: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)יכול להיות שזה יעבוד גם עבור קונטיינרים אחרים.
פורסם 2007 ביולי 318 שנים בוקטור אתה יכול פשוט לבצע את זה בשביל לקבל תוכן של תא c[i]אם הבנתי נכון את השאלה שלך...
פורסם 2007 ביולי 318 שנים מחבר בדקתי והאופרטור += מוגדר רק עבור random access iterators. זה יעבוד עבור ה vector.תודה!
פורסם 2007 ביולי 418 שנים יש את אלגוריתם STL שנקרא advance. למיטב זכרוני (אין לי רפרנס מולי):iteratorOfIndexN = v.begin();std::advance( iteratorOfIndexN, n );
פורסם 2007 ביולי 418 שנים מחבר צודק, שכחתי ממנו. בדקתי גם לגבי המימוש שלו ועבור iterator שהוא random access נעשה שימוש באופרטור += ככה שהוא מתאים לי בדיוק.תודה
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.