নাম অনুযায়ী, copy() মেথডটি C++ STL-এ ডেটা কপি করার জন্য ব্যবহৃত হয়। সব পদ্ধতির ফাংশনালিটি এবং প্যারামিটার ভিন্ন। এই পদ্ধতিগুলো <algorithm> হেডার ফাইলে উপলব্ধ। নিচে প্রতিটি মেথড এবং তাদের কার্যকারিতা আলোচনা করা হলো।
copy(start_i1, end_i1, start_i2)
এই মেথডটি একটি ইটেরেটর থেকে অন্য ইটেরেটরে নির্দিষ্ট রেঞ্জের ডেটা কপি করে, যেখানে শুরু এবং শেষ উভয় এলিমেন্টই ইনক্লুসিভ। এটি তিনটি আর্গুমেন্ট নেয়:
- Start_i1 − সোর্স ইটেরেটর (যেমন
i_1)য় প্রথম এলিমেন্টকে পয়েন্ট করে, যেখান থেকে কপি শুরু হবে। - End_i1 − সোর্স ইটেরেটর (যেমন
i_1)য় শেষ এলিমেন্টকে পয়েন্ট করে, যāv쇠 পর্যন্ত কপি হবে। - Start_i2 − ডেস্টিনেশন ইটেরেটর (যেমন
i_2)য় শুরুয় এলিমেন্ট কপি হবে এমন লোকেশনকে পয়েন্ট করে।
রিটার্ন ভ্যালু − ডেস্টিনেশন ইটেরেটরের শেষে (যেখানে এলিমেন্টগুলো কপি হয়েছে) একটি ইটেরেটর রিটার্ন করে।
উদাহরণ
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// ভেক্টর v1 তৈরি
vector<int> vec_1 = { 10, 20, 30, 40, 50 };
// নির্দিষ্ট সাইজের খালি ভেক্টর ঘোষণা
vector<int> vec_2(6);
// copy() ফাংশন ব্যবহার করে vec_2-এ কপি
copy(vec_1.begin(), vec_1.begin() + 4, vec_2.begin());
// নতুন ভেক্টর প্রিন্ট
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < 4; i++) {
cout << vec_2[i] << " ";
}
}
আউটপুট
Elements in vector v2 copied from v1: 10 20 30 40
copy_n(start_i1, total, start_i2)
এই মেথডটিও একটি ইটেরেটর থেকে অন্য ইটেরেটরে ডেটা কপি করে, কিন্তু এটি কম্পাইলারকে বলে দেয় যে নির্দিষ্ট লোকেশন থেকে মোট কতগুলো এলিমেন্ট কপি করতে হবে। এটি তিনটি আর্গুমেন্ট নেয়:
- Start_i1 − সোর্স ইটেরেটরের (যেমন
i_1) প্রথম এলিমেন্টকে পয়েন্ট করে। - Total −
start_i1লোকেশন থেকে শুরু করে মোট কতগুলো এলিমেন্ট কপি হবে তা নির্দেশ করে। এটি পজিটিভ এবং নেগেটিভ উভয় ইন্টিজার নিতে পারে, কিন্তু নেগেটিভ হলে কোন অপারেশন করবে না। - Start_i2 − ডেস্টিনেশন ইটেরেটরের (যেমন
i_2) শুরুয় এলিমেন্ট কপি হবে এমন লোকেশনকে পয়েন্ট করে।
রিটার্ন ভ্যালু − ডেস্টিনেশন ইটেরেটরের শেষে একটি ইটেরেটর রিটার্ন করে।
উদাহরণ
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> vec_1 = { 10, 20, 30, 40, 50 };
vector<int> vec_2(6);
// copy_n() ফাংশন ব্যবহার
copy_n(vec_1.begin(), 4, vec_2.begin());
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < 4; i++) {
cout << vec_2[i] << " ";
}
}
আউটপুট
Elements in vector v2 copied from v1: 10 20 30 40
copy_if(start_i1, end_i1, start_i2, Boolean function)
এই মেথডটি নির্দিষ্ট রেঞ্জের মধ্যে শর্তানুযায়ী ডেটা কপি করে। শর্তটি চতুর্থ আর্গুমেন্ট হিসেবে একটি বুলিয়ান ফাংশন দিয়ে দেওয়া হয়। এটি চারটি আর্গুমেন্ট নেয়:
- Start_i1 − সোর্স ইটেরেটরের প্রথম এলিমেন্ট।
- End_i1 − সোর্স ইটেরেটরের শেষ এলিমেন্ট।
- Start_i2 − ডেস্টিনেশন ইটেরেটরের শুরুয় লোকেশন।
- Boolean function − রেঞ্জের ওপর আরোপ করা শর্ত। এই ফাংশনের রিটার্ন টাইপ বুলিয়ান, তাই এটি true/false রিটার্ন করে এবং রিটার্ন ভ্যালুর ভিত্তিতে এলিমেন্টগুলো কপি হয়।
রিটার্ন ভ্যালু − ডেস্টিনেশন ইটেরেটরের শেষে একটি ইটেরেটর রিটার্ন করে।
উদাহরণ
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> vec_1 = { 10, 21, 30, 40, 57 };
vector<int> vec_2(6);
// copy_if() ফাংশন ব্যবহার করে জোড় সংখ্যা কপি
copy_if(vec_1.begin(), vec_1.end(), vec_2.begin(), [](int i) { return i % 2 == 0; });
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < 4; i++) {
cout << vec_2[i] << " ";
}
}
আউটপুট
Elements in vector v2 copied from v1: 10 30 40 0
copy_backward(start_i1, end_i1, end_i2)
এই মেথডটি নির্দিষ্ট রেঞ্জের ডেটা পেছনের দিকে (backward direction-এ) কপি করে। অর্থাৎ ইটেরেটরটি এর সাইজ অনুযায়ী শেষে চলে যায় এবং সেখান থেকে এলিমেন্টগুলো পেস্ট করা হয়। এটি তিনটি আর্গুমেন্ট নেয়:
- Start_i1 − সোর্স ইটেরেটরের প্রথম এলিমেন্ট।
- End_i1 − সোর্স ইটেরেটরের শেষ এলিমেন্ট।
- end_i2 − ডেস্টিনেশন ইটেরেটরের শেষ লোকেশন, যেখানে এলিমেন্টগুলো কপি হবে।
রিটার্ন ভ্যালু − ডেস্টিনেশন ইটেরেটরের শুরুয় এলিমেন্টকে পয়েন্ট করে একটি ইটেরেটর রিটার্ন করে।
উদাহরণ
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> vec_1 = { 10, 21, 30, 40, 57, 67 };
vector<int> vec_2(6);
// copy_backward() ফাংশন ব্যবহার
copy_backward(vec_1.begin(), vec_1.end() - 2, vec_2.begin() + 5);
cout << "Elements in vector v2 copied from v1: ";
for (int i = 0; i < vec_2.size(); i++) {
cout << vec_2[i] << " ";
}
}
আউটপুট
Elements in vector v2 copied from v1: 0 10 21 30 40 0