আপনার পছন্দ আপনার প্রয়োজন প্রতিফলিত করা উচিত। ভেক্টরগুলির সমস্ত উপাদান স্মৃতিতে ক্রমাগত থাকে এবং তালিকাগুলি পরবর্তী / পূর্ববর্তী উপাদানগুলিতে পয়েন্টার থাকে যাতে তাদের প্রত্যেকটির সুবিধা / অপব্যয় থাকে:
তালিকা:
- পূর্ববর্তী এবং পরবর্তী উপাদানগুলিকে নির্দেশ করতে প্রতিটি উপাদান 2 টি পূর্ণসংখ্যা নেয়, তাই সাধারণভাবে এটি আপনার তালিকার প্রতিটি উপাদানগুলির জন্য 8 বাইট বেশি থাকে
- সন্নিবেশ সময়রেখাতে লিনিয়ার: ও (এন)
- অপসারণ একটি ধ্রুবক ক্রিয়াকলাপ: ও (1)
- এক্স এলিমেন্টটি সময়ে লিনিয়ার অ্যাক্সেস করুন: ও (এন)
ভেক্টর:
- কম স্মৃতি দরকার (অন্যান্য উপাদানগুলিতে কোনও পয়েন্টার নেই, এটি একটি সাধারণ গণিতের অ্যালগরিদম)
- সরান সময় রৈখিক: ও (এন)
- এক্স উপাদানটি অ্যাক্সেস অবিচ্ছিন্ন: ও (1) (এটি কারণ উপাদানগুলি স্মৃতিতে ক্রমাগত থাকে তাই এটি একটি সাধারণ গণিত ক্রিয়াকলাপ ভেক্টরপিটি + (x * বাইটস অফ টাইপ))
- সন্নিবেশ রৈখিক সময়ে হতে পারে, তবে বেশিরভাগ ক্ষেত্রে, এটি একটি ধ্রুবক ক্রিয়াকলাপ: O (1) (অ্যারেতে ভেক্টর থাকলেও অ্যারেটি পূর্ণ হয় তাই অ্যারে অনুলিপিটি ঘন ঘন হয় না এমন সময় তার ক্ষমতাটি 2 বার সংরক্ষণ করে)
সুতরাং তালিকাটি আরও ভাল হয় যখন আপনার প্রোগ্রামটি ঘন ঘন উপাদানগুলি যুক্ত করতে এবং মুছে ফেলার প্রয়োজন হয় তবে অন্যের প্রয়োজন ছাড়া কোনও নির্দিষ্ট উপাদানকে কখনই অ্যাক্সেস করতে (বা খুব কমই অ্যাক্সেস করতে হবে না)। ভ্যাক্টরটি অ্যাক্সেসের আরও ভাল সময়ের জন্য ব্যবহার করা উচিত, তবে যখন আপনাকে উপাদানগুলি অপসারণ বা যুক্ত করতে হবে তখন কার্যকারিতার অভাব রয়েছে।
এই পোস্টটি স্ট্যাকওভারফ্লোতে দেখুন, এটি আপনার প্রয়োজনের ভিত্তিতে প্রাথমিক প্রশ্নগুলির সাথে একটি দুর্দান্ত গ্রাফ উপস্থাপন করে যা আপনাকে আপনার উত্তরগুলির উপর নির্ভর করে একটি নির্দিষ্ট ধারকটিতে নিয়ে যায়:
/programming/366432/extending-stdlist