עבור לתוכן

רשימות מקושרות, יש צורך?

Featured Replies

פורסם

אני חושב לעצמי, מה היתרונות של יצירת מחלקה לרשימה מקושרת, כשיש לנו היום בספריית ה stl את המחלקה vector?

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

פורסם

יש ב STL גם מחלקה list..

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

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

יתרון נוסף של רשימה מקושרת הוא שאפשר להוסיף תאים לאמצע הרשימה בזמן קבוע, לעומת מערך שמצריך הזזה של כל התאים שאחרי המיקום הרצוי.

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

פורסם
  • מחבר

יש ב STL גם מחלקה list..

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

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

יתרון נוסף של רשימה מקושרת הוא שאפשר להוסיף תאים לאמצע הרשימה בזמן קבוע, לעומת מערך שמצריך הזזה של כל התאים שאחרי המיקום הרצוי.

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

בעצם דיקלמת לי את היתרונות של רשימה מקושרת על פני מערך, שאגב הוא לא מתפקד כמערך אלא כרשימה מקושרת לכל דבר

עם פונקציות מובנות מעולות

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

פורסם

בעצם דיקלמת לי את היתרונות של רשימה מקושרת על פני ווקטור

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

שאגב הוא (וקטור) לא מתפקד כמערך אלא כרשימה מקושרת לכל דבר

זה לא נכון:

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.

פורסם

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

לפעמים אתה צריך משהו ש-std::list לא מציעה. לדוגמא intrusive list, אשר עובדת ללא הקצאות זכרון (יש ב-boost).

פורסם

מהזאתאומרת יש בBOOST ?

פורסם
  • מחבר

boost זו חבילת ספריות מאוד מאוד יעילות ואיכותיות לc++

מן stl++

עם המון תוספות, המון מחלקות למולטי ת'ראדינג, סוקטים ועוד..

עד כמה שידוע לי רוב או כל המחלקה היא מבוססת תבניות.

פורסם

היתרון העיקרי של linked list על מערך משתנה-דינמית סטייל vector הוא בזמן הריצה של הוספת איבר באמצע (וגם טיפה יותר מהירה בהוספת איבר חדש,למרות שזה די שולי)

אם מהירות גישה רנדומלית לתאים במערך חשובה לך - vector יהיה הרבה יותר יעיל

אם חשוב לך להוסיף דברים באמצע הרשימה ויש לך רשימה גדולה משמעותית - לינק ליסט יהיה יותר יעיל

*שים לב שיש עוד הרבה קונטיינרים בSTL מעבר ל2 האלו

פורסם
  • מחבר

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

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

ארכיון

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

דיונים חדשים