C++ STL-এ list হলো ডাবলি লিঙ্কড লিস্ট কন্টেইনার। এতে এলিমেন্ট নন-কন্টিগুয়াস মেমোরিতে স্টোর হয়। ইন্সারশন ও ডিলিশন দুই প্রান্ত থেকে O(1)-এ সম্ভব। ভেক্টরের চেয়ে র্যান্ডম এক্সেস স্লো।
লিস্টের সুবিধা ও অসুবিধা
- সুবিধা: ইটারেটর পজিশন ঠিক থাকলে ইন্সারশন/ডিলিশন খুব দ্রুত।
- অসুবিধা: পজিশন দিয়ে সরাসরি এলিমেন্ট এক্সেস করা যায় না (O(n))।
প্রধান ফাংশনসমূহ
| ফাংশন | ব্যবহার |
|---|---|
push_front(x) | শুরুরে এলিমেন্ট যোগ করুন |
push_back(x) | শেষে এলিমেন্ট যোগ করুন |
insert(pos, n, x) | pos পজিশনে n কপি x ইনসার্ট করুন |
pop_front() | প্রথম এলিমেন্ট মুছে দিন |
pop_back() | শেষ এলিমেন্ট মুছে দিন |
front() / back() | প্রথম/শেষ এলিমেন্ট রেফারেন্স |
size() / empty() | সাইজ / খালি কিনা চেক |
resize(n, val) | সাইজ পরিবর্তন করুন |
clear() | সব এলিমেন্ট মুছে দিন |
remove(val) | সব val মুছে দিন |
remove_if(pred) | প্রিডিকেট অনুযায়ী মুছে দিন |
erase(pos) / erase(first,last) | এক বা একাধিক এলিমেন্ট মুছে দিন |
reverse() | লিস্ট রিভার্স করুন |
unique() | কনসিকিউটিভ ডুপ্লিকেট মুছে দিন |
sort() | লিস্ট সর্ট করুন |
merge(other) | সর্টেড লিস্ট মার্জ করুন |
splice(pos, other) | অন্য লিস্টের এলিমেন্ট মুভ করুন |
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> lst = {10, 20, 30};
lst.push_front(5); // {5,10,20,30}
lst.push_back(40); // {5,10,20,30,40}
lst.insert(next(lst.begin(), 2), 15); // {5,10,15,20,30,40}
for (int x : lst) cout << x << " "; // 5 10 15 20 30 40
cout << endl;
lst.remove(15); // {5,10,20,30,40}
lst.reverse(); // {40,30,20,10,5}
for (int x : lst) cout << x << " ";
}