এখানে আমরা C++-এ আউটপুট ইটেরেটর (Output Iterators) কী তা দেখব। আউটপুট ইটেরেটর의 কিছু প্রপার্টি রয়েছে। নিচে সেগুলো দেওয়া হলো:
- আউটপুট ইটেরেটর কন্টেইনারের ভ্যালু মডিফাই করতে ব্যবহৃত হয়।
- এই ধরনের ইটেরেটর ব্যবহার করে কন্টেইনার থেকে ডেটা পড়া যায় না।
- এটি वन-ওয়ে (One-Way) এবং রাইট-অনلی (Write-only) ইটেরেটর।
- এটি ইনক্রিমেন্ট করা যায়, কিন্তু ডিক্রিমেন্ট করা যায় না।
- আউটপুট ইটেরেটরের দুটি সাব-পার্ট রয়েছে: ইনসার্ট ইটেরেটর (Insert Iterator) এবং ostream ইটেরেটর।
ইনসার্ট ইটেরেটর (The Insert Iterator)
ইনসার্ট ইটেরেটর কন্টেইনারের ভিতরে কিছু এলিমেন্ট ইনসার্ট করতে ব্যবহৃত হয়। এই টাইপের ইটেরেটরে অ্যাসাইনমেন্ট অপারেটর ব্যবহার করলে কারেন্ট পজিশনে নতুন এলিমেন্ট ইনসার্ট হয়। ইনসার্ট ইটেরেটর এর সিনট্যাক্স নিচের মতো:
template<class Container, class Iterator> insert_iterator<container> inserter(Container &x, Iterator it);
এই ইটেরেটর দুটি প্যারামিটার নেয়: x এবং it। x হলো কন্টেইনার, যার ওপর ইটেরেটর কাজ করবে। দ্বিতীয় আর্গুমেন্ট হলো একটি ইটেরেটর অবজেক্ট, যা যে পজিশনটি মডিফাই করা হবে সেটি নির্দেশ করে।
উদাহরণ কোড (Insert Iterator)
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec1, vec2;
for (int i = 1; i <= 10; i++) { // ভেক্টরগুলোতে এলিমেন্ট ইনসার্ট
vec1.push_back(i);
vec2.push_back(i + 3);
}
vector<int>::iterator it = vec1.begin(); // ইটেরেটর vec1-এ কাজ করবে
advance(it, 5); // it কে ৫ নম্বর পজিশনে এগিয়ে আনুন
copy(vec2.begin(), vec2.end(), inserter(vec1, it));
cout << "Elements of vec1 are: ";
for (it = vec1.begin(); it != vec1.end(); ++it)
cout << ' ' << *it;
cout << endl;
return 0;
}
আউটপুট
Elements of vec1 are: 1 2 3 4 5 4 5 6 7 8 9 10 11 12 13 6 7 8 9 10
ostream ইটেরেটর (The ostream Iterator)
ostream ইটেরেটর আউটপুট স্ট্রিমে (যেমন cout) লেখতে ব্যবহৃত হয়। ostream ইটেরেটর basic_ostream অবজেক্ট ব্যবহার করে তৈরি করা যায়। এই টাইপের ইটেরেটরের সাথে অ্যাসাইনমেন্ট অপারেটর ব্যবহার করলে আউটপুট স্ট্রিমে নতুন এলিমেন্ট ইনসার্ট হয়। সিনট্যাক্স নিচের মতো:
template<class T, class charT=char, class traits=char_traits<charT>> class ostream_iterator;
ostream ইটেরেটর ক্লাসের মেম্বার ফাংশনগুলো নিচের মতো:
ostream_iterator<T, charT, traits>& operator=(const T& value); ostream_iterator<T, charT, traits>& operator*(); ostream_iterator<T, charT, traits>& operator++(); ostream_iterator<T, charT, traits>& operator++(int);
প্যারামিটারগুলো: T - ইনসার্ট হওয়া এলিমেন্টের টাইপ, charT - ostream যা হ্যান্ডেল করতে পারে সেসব এলিমেন্টের টাইপ, traits - স্ট্রিম যা হ্যান্ডেল করতে পারে সেসব ক্যারেক্টার ট্রেইটস।
উদাহরণ কোড (ostream Iterator)
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vector;
for (int i = 1; i <= 10; i++)
vector.push_back(i * i); // বর্গ করে ইনসার্ট
ostream_iterator<int> out(cout, ",");
copy(vector.begin(), vector.end(), out);
}
আউটপুট
1,4,9,16,25,36,49,64,81,100,
আরেকটি উদাহরণ:
উদাহরণ কোড
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ostream_iterator<int> os_out(cout, ",");
*os_out = 10;
os_out++; // পরবর্তীতে পয়েন্ট করুন
*os_out = 20;
os_out++;
*os_out = 30;
}
আউটপুট
10,20,30,