ที่นี่เราจะดู Output iterators ใน C++ คุณสมบัติ:
- ใช้แก้ไขค่าของ container
- อ่านข้อมูลจาก container ไม่ได้
- One-way, write-only iterator
- Increment ได้ แต่ decrement ไม่ได้
- มี 2 ส่วนย่อย: Insert Iterator และ ostream Iterator
Insert Iterator
ใช้แทรกสมาชิกเข้า container Assignment operator จะแทรกสมาชิกใหม่ที่ตำแหน่งปัจจุบัน ไวยากรณ์:
template<class Container, class Iterator> insert_iterator<container> inserter(Container &x, Iterator it);
รับพารามิเตอร์ 2 ตัว: x คือ container ที่ iterator ทำงาน, it คือ iterator ชี้ตำแหน่งที่จะแก้ไข
ตัวอย่าง 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();
advance(it, 5);
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 Iterator
ใช้เขียนไปยัง output stream เช่น cout สร้างจาก basic_ostream object Assignment operator จะแทรกสมาชิกใหม่เข้า output stream ไวยากรณ์:
template<class T, class charT=char, class traits=char_traits<charT>> class ostream_iterator;
Member functions:
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 = character traits
ตัวอย่าง Ostream Iterator
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<int> vec;
for (int i=1; i<=10; i++)
vec.push_back(i*i);
ostream_iterator<int> out(cout, ",");
copy(vec.begin(), vec.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,