Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Output Iterator trong C++

Chúng ta sẽ xem Output iterator trong C++. Output iterator có các thuộc tính sau:

  • Output iterator dùng để sửa đổi giá trị của container.
  • Không thể đọc dữ liệu từ container bằng loại iterator này.
  • Là iterator một chiều (One-Way) và chỉ ghi (Write only).
  • Có thể tăng (increment) nhưng không thể giảm (decrement).
  • Có hai loại con: Insert Iterator và ostream iterator.

Insert Iterator

Insert iterator dùng để chèn phần tử vào container. Toán tử gán trên iterator này chèn phần tử mới tại vị trí hiện tại. Cú pháp:

template<class Container, class Iterator> insert_iterator<container> inserter(Container &x, Iterator it);

Iterator này nhận hai tham số: x là container để iterator làm việc, it là iterator object trỏ đến vị trí cần sửa đổi.

Ví dụ Code

#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); // tiến it đến vị trí 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;
}

Kết quả

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

Ostream iterator dùng để ghi ra luồng xuất như cout. Tạo từ đối tượng basic_ostream. Khi dùng toán tử gán, nó chèn phần tử mới vào luồng xuất. Cú pháp:

template<class T, class charT=char, class traits=char_traits<charT>> class ostream_iterator;

Các hàm thành viên của lớp ostream_iterator:

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);

Tham số: T - kiểu phần tử chèn, charT - kiểu ký tự ostream xử lý, traits - đặc tính ký tự luồng xử lý.

Ví dụ Code

#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); // bình phương và chèn
  ostream_iterator<int> out(cout, ",");
  copy(vec.begin(), vec.end(), out);
}

Kết quả

1,4,9,16,25,36,49,64,81,100,

Ví dụ khác:

Ví dụ Code

#include <iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
  ostream_iterator<int> os_out(cout, ",");
  *os_out = 10;
  os_out++; // trỏ tiếp
  *os_out = 20;
  os_out++;
  *os_out = 30;
}

Kết quả

10,20,30,