אולי תקראו את האילוצים ?
הדרישות הן - כתיבה מיידית של איבר בסוף המערך (וזה כולל גם אם נגמר המקום וצריך להקצות מקום חדש). הקריאה מהמערך יכולה להיות איטית יותר. תחשבו על logging של תהליך ב-RealTime, שאני צריך לצפות בו אחת לכמה זמן. כיון שמימשתי את זה במערך שטוח וגדול, הדיון הוא תיאורטי, אז לא אכפת לי לשבור את הראש. (או שהפורום נועד רק לדיונים פרקטיים
?) מלבד זה הפתרון שלי גמיש, לא מסובך כל-כך (תסתכלו במימוש), תופס פחות מקום מכל פתרון שכולל מבנה של מצביעים לכל איבר. (תזכרו גם שאיבר בודד הוא טיפוס נתונים מאד קטן (במקרה הזה int) כך שהוספת מצביעים לכל איבר מכפילה פי כמה את דרישות הזיכרון). הקריאה מהמערך בכלל לא איטית (לאיבר n זה לכל היותר n/min_items_in_array אתם מוזמנים לחשב את הממוצע, ואם אנחנו יודעים מראש את הגודל של כל מערך ניתן לקצר כל איטרציה). אם יש לתוכנית זמן פנוי, אפשר לבצע למבנה הנתונים אופטימיזציה כדי להשיג גישה מהירה (O(1 (פשוט עוברים על כל המערכים המשורשרים ומעתיקים אותם למערך אחד גדול כמו ב-vector). למחיקת איבר יש שני פתרונות - אם יש מספר קטן של מחיקות ודרושה פעולה מהירה, אפשר לשרשר את האיברים שאחרי האיבר שמחקנו למערך חדש ולשנות את מספר האיברים במערך המקורי כך שיסתיים לפני האיבר. הבעיה בפתרון הזה שהוא הופך את הנתונים ליותר פרגמנטיים ואת גודל המערכים ללא קונסיסטנטי ולכן מגדיל את זמן הקריאה אחר-כך. הפתרון השני הוא לכתוב מחדש את המערך הספציפי שבו האיבר המחוק בלי האיבר הזה, אם שומרים על גודל בינוני של המערכים, יהיו לנו גם כאן ביצועים לא רעים (יותר טובים ממחיקת איבר בסתם מערך אחד גדול, מצד שני אנחנו לא צריכים רשימה מקושרת דו-צידית לכל איבר במערך).