STL-এ List কী?
List হল একটি ডেটা স্ট্রাকচার যা সিকোয়েন্সের যেকোনো স্থানে কনস্ট্যান্ট টাইমে ইন্সারশন এবং ডিলিশন করার অনুমতি দেয়। লিস্টগুলো ডাবলি লিংকড লিস্ট হিসেবে ইমপ্লিমেন্ট করা হয়। লিস্ট নন-কন্টিগ্যুয়াস মেমোরি অ্যালোকেশন অনুমোদন করে। অ্যারে, ভেক্টর এবং ডিকের চেয়ে লিস্ট যেকোনো পজিশনে এলিমেন্ট ইন্সার্ট, এক্সট্রাক্ট এবং মুভ করার ক্ষেত্রে ভালো পারফরম করে। লিস্টে এলিমেন্টে ডায়রেক্ট অ্যাক্সেস ধীরগতির এবং লিস্ট forward_list-এর সাথে সাদৃশ্য রেখেছে, কিন্তু forward_list অবজেক্টগুলো সিঙ্গলি লিংকড লিস্ট এবং সেগুলো শুধু ফরওয়ার্ড দিয়ে ইটারেট করা যায়।
list::splice() কী?
list::splice() হল C++ STL-এ একটি বিল্ট-ইন ফাংশন যা হেডার ফাইলে ডিক্লেয়ার করা আছে। splice() একটি লিস্ট কন্টেইনার থেকে অন্য লিস্ট কন্টেইনারে একটি নির্দিষ্ট পজিশনে এলিমেন্ট ট্রান্সফার করতে ব্যবহৃত হয়। এই ফাংশন একটি লিস্টে কন্টেন্ট ইনসার্ট করে এবং সেগুলো অন্য লিস্ট থেকে রিমুভ করে, ফলে দুটি লিস্টের সাইজ মডিফাই হয়।
সিনট্যাক্স
এই ফাংশনের সিনট্যাক্স ৩ ভাবে ডিফাইন করা যায়: list1.splice(position, list2); list1.splice(position, list2, i); list1.splice(position, list2, first, last);
প্যারামিটার
- position − লিস্টে যেখানে এলিমেন্ট ট্রান্সফার করতে চাই সেটা পজিশন।
- list2 − যে লিস্ট থেকে এলিমেন্ট ট্রান্সফার করতে চাই।
- i: এটি একটি ইটারেটর যা list2-এ उस পজিশনটি স্পেসিফাই করে যেখানে থেকে এলিমেন্ট ট্রান্সফার শুরু হবে list2-এর শেষ পর্যন্ত।
- first, last − ये দুটি ইটারেটর যা list2-এ যে রেঞ্জ থেকে এলিমেন্ট ট্রান্সফার করতে চাই সেটা ডিফাইন করে।
উদাহরণ
Input: list<int> List_container = { 10, 11, 13, 15}; list<int> List2 = {1, 2, 3, 4}; List_container.splice(2, List2); Output: List_container = 10 11 13 15 3 4 List2 = 1 2
রিটার্ন ভ্যালু
এই ফাংশন একটি রিভার্স ইটারেটর রিটার্ন করে যা লিস্টের শেষ এলিমেন্টকে পয়েন্ট করে। রিভার্স ইটারেটর হল এমন একটি ইটারেটর যা বিপরীত দিকের দিকে মুভ করে।
সম্পূর্ণ কোড উদাহরণ ১
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> myList_1 = { 10, 20, 30, 40 };
list<int> myList_2 = { 50, 60 };
list<int>::iterator i;
i = myList_2.begin();
myList_1.splice(myList_1.end(), myList_2, i);
cout << "list after splice operation" << endl;
for (auto temp : myList_1)
cout << temp << " ";
return 0;
}
আউটপুট
list after splice operation 10 20 30 40 50
সম্পূর্ণ কোড উদাহরণ ২
#include <bits/stdc++.h>
using namespace std;
int main() {
list<int> myList_1 = { 10, 20 };
list<int> myList_2 = { 30, 40, 50 };
list<int> myList_3 = {60};
myList_1.splice(myList_1.begin(), myList_2);
cout << "list 1 after splice operation" << endl;
for (auto x : myList_1)
cout << x << " ";
myList_3.splice(myList_3.end(), myList_1);
cout << "\nlist 3 after splice operation" << endl;
for (auto x : myList_3)
cout << x << " ";
return 0;
}
আউটপুট
list 1 after splice operation 30 40 50 10 20 list 3 after splice operation 60 30 40 50 10 20