تفاوتهای اصلی vector
و list
به نحوهی ذخیرهسازی اونها برمیگرده.
بردار (vector
) به صورت آرایهی پویا ذخیره میشه. یعنی همهی اعضاش پشت سر هم در حافظه ذخیره میشن. اما لیست (list
) به صورت لیست پیوندی. بنابراین اعضاش به صورت پراکنده در حافظه قرار دارن.
این تفاوت ذخیرهسازی باعث میشه تفاوتهای کاربردی زیر پیش بیاد
۱- کارایی خواندن: چون بردار مثل آرایهی پویا میمونه، دسترسی به همهی اعضاش با یه سرعت انجام میشه و دسترسی تصادفی داره. یعنی سرعت دسترسی به عضو اول و وسط و آخرش یه چیزه. اما لیست چون به صورت لیست پیوندی ذخیره میشه، دسترسی به اعضاش با پیمایش اتفاق میافته که بدیهیه دسترسی به عضو اول در پیمایش سریعتر از عضو دوم و دسترسی به عضو دوم سریعتر از عضو اول هست.
۲- امکان درج و حذف: امکان درج و حذف از بردار وجود داره اما باید همهی اعضا دوباره شیفت داده بشن به عقب تا خاصیت آرایه پویا بودنش حفظ بشه اما در لیست حذف و درج بین دو گره به راحتی بدون جابهجایی بقیه اعضا صورت میگیره.
۳- حافظهی مصرفی هر عضو بردار فقط همون اندازهی نوع داده است. مثلاً در vector<int>
هر عضو برابر یه int
حافظه میگیره. اما در لیست اشارهگرهایی به قبل و بعد هم وجود دارن یعنی list<int>
اعضایی با حداقل سه عضو داره. ۱- خود عدد ۲- اشارهگر به بعد ۳- اشارهگر به قبل.
تفاوتهای دیگهای هم وجود داره. بنابراین موقع استفاده از هر یک از این دو تا باید به کاربرد نگاه کرد و با توجه به این تفاوت اصلی (ذخیرهسازی) تصمیم گرفت.
معمولاً استفاده از بردار برای کاربردهای معمولی مناسبتر هست.
هیچ پژوهش انسانی نمیتواند ادعای علمی بودن داشته باشد، مگر اینکه از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)