פורסם 2009 באוגוסט 2016 שנים אני חושב לעצמי, מה היתרונות של יצירת מחלקה לרשימה מקושרת, כשיש לנו היום בספריית ה stl את המחלקה vector?ישנם יתרונות בכלל, וגם אם כן, אפשר פשוט להוסיף למחלקה של הווקטור מה שאין בה(לא עולה לי משהו קריטי בראש).
פורסם 2009 באוגוסט 2016 שנים יש ב STL גם מחלקה list..היתרון ב list הוא שהתאים לא צריכים להיות מאוחסנים בצורה רציפה כמו במערך (או ווקטור).היתרון בזה הוא שאפשר להוסיף תאים כל עוד יש מספיק זיכרון, לעומת מערך שבמקרה שנוצרת פרגמנטציה בזיכרון - המחלקה צריכה להעביר את כל המערך למקום פנוי בזיכרון שיספיק לו, אם יש כזה.יתרון נוסף של רשימה מקושרת הוא שאפשר להוסיף תאים לאמצע הרשימה בזמן קבוע, לעומת מערך שמצריך הזזה של כל התאים שאחרי המיקום הרצוי.החיסרון המרכזי של רשימה הוא שגישה לתאים מסויימים בה לוקחת זמן לינארי ביחס למיקום שלהם, בעוד שבמערך הזמן קבוע.
פורסם 2009 באוגוסט 2016 שנים מחבר יש ב STL גם מחלקה list..היתרון ב list הוא שהתאים לא צריכים להיות מאוחסנים בצורה רציפה כמו במערך (או ווקטור).היתרון בזה הוא שאפשר להוסיף תאים כל עוד יש מספיק זיכרון, לעומת מערך שבמקרה שנוצרת פרגמנטציה בזיכרון - המחלקה צריכה להעביר את כל המערך למקום פנוי בזיכרון שיספיק לו, אם יש כזה.יתרון נוסף של רשימה מקושרת הוא שאפשר להוסיף תאים לאמצע הרשימה בזמן קבוע, לעומת מערך שמצריך הזזה של כל התאים שאחרי המיקום הרצוי.החיסרון המרכזי של רשימה הוא שגישה לתאים מסויימים בה לוקחת זמן לינארי ביחס למיקום שלהם, בעוד שבמערך הזמן קבוע.בעצם דיקלמת לי את היתרונות של רשימה מקושרת על פני מערך, שאגב הוא לא מתפקד כמערך אלא כרשימה מקושרת לכל דברעם פונקציות מובנות מעולותלמעשה קיבלתי את התשובה מחבר, הטעם הוא ביצועים בזכרון ומקום , המחלקה ווקטור לא תיהיה יעילה במערכות עם מעט מאוד זיכרון, ותיהיה חייב להשתמש ברשימה מקושרת עם פחות מאפיינים.
פורסם 2009 באוגוסט 2016 שנים בעצם דיקלמת לי את היתרונות של רשימה מקושרת על פני ווקטורנכון, זה כי מהשאלה שלך זה נראה כאילו לא ידעת על ההבדלים.שאגב הוא (וקטור) לא מתפקד כמערך אלא כרשימה מקושרת לכל דברזה לא נכון:http://www.cplusplus.com/reference/stl/vector/their elements are ordered following a strict linear sequence.Vector containers are implemented as dynamic arrays; Just as regular arrays, vector containers have their elements stored in contiguous storage locations, which means that their elements can be accessed not only using iterators but also using offsets on regular pointers to elements.
פורסם 2009 באוגוסט 2016 שנים לפעמים זה מאוד נוח לממש רשימה בעצמך, ואז היא תפורה בדיוק למה שאתה צריך.לפעמים אתה צריך משהו ש-std::list לא מציעה. לדוגמא intrusive list, אשר עובדת ללא הקצאות זכרון (יש ב-boost).
פורסם 2009 באוגוסט 2016 שנים מחבר boost זו חבילת ספריות מאוד מאוד יעילות ואיכותיות לc++מן stl++עם המון תוספות, המון מחלקות למולטי ת'ראדינג, סוקטים ועוד..עד כמה שידוע לי רוב או כל המחלקה היא מבוססת תבניות.
פורסם 2009 באוגוסט 2016 שנים היתרון העיקרי של linked list על מערך משתנה-דינמית סטייל vector הוא בזמן הריצה של הוספת איבר באמצע (וגם טיפה יותר מהירה בהוספת איבר חדש,למרות שזה די שולי)אם מהירות גישה רנדומלית לתאים במערך חשובה לך - vector יהיה הרבה יותר יעילאם חשוב לך להוסיף דברים באמצע הרשימה ויש לך רשימה גדולה משמעותית - לינק ליסט יהיה יותר יעיל*שים לב שיש עוד הרבה קונטיינרים בSTL מעבר ל2 האלו
פורסם 2009 באוגוסט 2016 שנים מחבר הבנתי, בעצם מאחר ומחלקת ווקטור משתמשת באינדקס, הגישה לאיבר מסויים מהירה יותראך הוספת איבר דורשת יותר תהליכים , כמו שחשבתי, שיקולי ביצועים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.