Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Output Iterators ใน C++

ที่นี่เราจะดู 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,