ভেক্টর (vector), লিস্ট (list), ডেক (deque), এবং সেট (set) হলো C++ স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরির (STL) কিছু গুরুত্বপূর্ণ কনটেইনার, যা বিভিন্ন ধরনের ডেটা স্ট্রাকচার সরবরাহ করে। প্রতিটি কনটেইনারের নিজস্ব বৈশিষ্ট্য ও ব্যবহারের উদ্দেশ্য রয়েছে। নিচে প্রতিটি কনটেইনারের ব্যাখ্যা ও উদাহরণ প্রদান করা হলো।
১. ভেক্টর (vector)
ভেক্টর হলো C++ এর ডাইনামিক অ্যারে। এটি আকারে বাড়তে বা কমতে পারে, এবং ইনডেক্সের মাধ্যমে দ্রুত অ্যাক্সেস করা যায়। ভেক্টর sequence container হিসেবে কাজ করে, যা ডেটা সংরক্ষণ করতে ধারাবাহিক মেমোরি লোকেশন ব্যবহার করে।
বৈশিষ্ট্য
- ডাইনামিক আকার পরিবর্তন করতে পারে।
- ইনডেক্স ব্যবহার করে সরাসরি অ্যাক্সেস করা যায়।
push_backএবংpop_backফাংশনের মাধ্যমে শেষে উপাদান যোগ ও মুছা যায়।
উদাহরণ: vector
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {10, 20, 30};
// মান যোগ করা
numbers.push_back(40);
numbers.push_back(50);
// মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
10 20 30 40 50
২. লিস্ট (list)
লিস্ট হলো ডাবল-লিঙ্কড লিস্ট, যা STL এর আরেকটি কনটেইনার। লিস্টে উপাদানগুলো ক্রম অনুযায়ী সংরক্ষণ করা হয়। লিস্টে সামনে বা পেছনে উপাদান যোগ ও মুছা সহজ, তবে ইনডেক্সের মাধ্যমে সরাসরি অ্যাক্সেস করা সম্ভব নয়।
বৈশিষ্ট্য
- ডাবল-লিঙ্কড লিস্ট, অর্থাৎ প্রতিটি উপাদান তার পূর্ববর্তী ও পরবর্তী উপাদানের সাথে সংযুক্ত থাকে।
- দ্রুততার সাথে সামনে বা পেছনে উপাদান যোগ বা মুছা যায়।
- ইনডেক্সের মাধ্যমে সরাসরি অ্যাক্সেস করা যায় না।
উদাহরণ: list
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> numbers = {10, 20, 30};
// সামনে ও পেছনে মান যোগ করা
numbers.push_front(5);
numbers.push_back(40);
// মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
5 10 20 30 40
৩. ডেক (deque)
ডেক হলো ডাবল-এন্ডেড কিউ (Double-Ended Queue)। এটি এমন একটি কনটেইনার, যেখানে সামনে ও পেছনে উভয় দিক থেকে উপাদান যোগ ও মুছা যায়। ডেক sequence container হিসেবে কাজ করে, এবং এটি ভেক্টরের মতোই দ্রুত অ্যাক্সেসযোগ্য।
বৈশিষ্ট্য
- সামনে ও পেছনে উপাদান যোগ এবং মুছা যায়।
- ইনডেক্স ব্যবহার করে সরাসরি অ্যাক্সেস করা যায়।
- ভেক্টরের মতোই দ্রুত অ্যাক্সেসযোগ্য এবং আকার পরিবর্তনশীল।
উদাহরণ: deque
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> numbers = {10, 20, 30};
// সামনে ও পেছনে মান যোগ করা
numbers.push_front(5);
numbers.push_back(40);
// মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
5 10 20 30 40
৪. সেট (set)
সেট হলো অ্যাসোসিয়েটিভ কনটেইনার, যেখানে উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে এবং প্রতিটি উপাদান ইউনিক হয়, অর্থাৎ ডুপ্লিকেট মেম্বার থাকে না। set সাধারণত ডেটা অনুসন্ধান ও অনন্য মান সংরক্ষণের জন্য ব্যবহৃত হয়।
বৈশিষ্ট্য
- প্রতিটি উপাদান অনন্য (ডুপ্লিকেট সংরক্ষণ করা যায় না)।
- উপাদানগুলো স্বয়ংক্রিয়ভাবে ছোট থেকে বড় ক্রমে সাজানো থাকে।
- ইনডেক্স ব্যবহার করে সরাসরি অ্যাক্সেস করা যায় না।
উদাহরণ: set
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> numbers = {30, 10, 20, 20, 40};
// মান প্রিন্ট করা (সাজানো এবং ইউনিক মান)
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
10 20 30 40
সারসংক্ষেপ
| কনটেইনার | বর্ণনা | অ্যাক্সেস টাইপ | বিশেষ বৈশিষ্ট্য |
|---|---|---|---|
| vector | ডাইনামিক অ্যারে | ইনডেক্স | দ্রুত ইনডেক্স অ্যাক্সেস |
| list | ডাবল-লিঙ্কড লিস্ট | ইনডেক্সবিহীন | দ্রুত সামনে-পেছনে যোগ-মুছা |
| deque | ডাবল-এন্ডেড কিউ | ইনডেক্স | সামনে ও পেছনে যোগ-মুছা |
| set | স্বয়ংক্রিয়ভাবে সাজানো, ইউনিক মান | ইনডেক্সবিহীন | ডুপ্লিকেট মান রাখে না |
ব্যবহারিক দিক থেকে সঠিক কনটেইনার নির্বাচন
- যদি ডাইনামিক অ্যারে প্রয়োজন হয় এবং ইনডেক্সে দ্রুত অ্যাক্সেস দরকার হয়, তাহলে
vectorব্যবহার করুন। - যদি ডাবল-লিঙ্কড লিস্ট প্রয়োজন হয়, যেখানে ইনডেক্সের প্রয়োজন নেই, তবে
listব্যবহার করা সেরা। - যদি ডাবল-এন্ডেড কিউ দরকার হয়, যেখানে উভয় দিক থেকে উপাদান যোগ-মুছা সম্ভব, তাহলে
dequeব্যবহার করুন। - যদি ডেটার অনন্য এবং স্বয়ংক্রিয়ভাবে সাজানো দরকার হয়, তবে
setব্যবহার করুন।
STL এর এই কনটেইনারগুলো বিভিন্ন পরিস্থিতিতে ডেটা সংরক্ষণ ও ব্যবস্থাপনা করতে কার্যকরভাবে সাহায্য করে।