Giriş
5 tane iterator kategorisi var. Bunlar
1. input_iterator_tag - InputIterator yazısına bakınız.
2. output_iterator_tag - Bu yazı.
3. forward_iterator_tag - ForwardIterator yazısına bakınız.
4. bidirectional_iterator_tag,
5. random_access_iterator_tag - RandomAccessIterator yazısına bakınız
forward_iterator_tag,bidirectional_iterator_tag ve random_access_iterator_tag yapıları aynı zamanda output_iterator_tag'den kalıtır.
Açıklaması şöyle
Sınıf şöyle tanımlanır
Bu metod tanımlı değilse VS 2012'den itibaren hata alırız.
operator = metodu
Output Iterator sınıfının en önemli metodu = operatörüdür. Burada yapılması gereken iş yapılır.
Şöyle yaparız. Bu metodu genelde doldurmaya gerek olmaz.
Şöyle yaparız. Bu metodu doldurmak gerekir.
operator ++ metodu
Şöyle yaparız. Bu metodu genelde doldurmaya gerek olmaz.
while (true) {
*pos = foo ();
++pos;
}
Bu kod parçası ise end() kullandığı için output iterator açısından imkansızdır.
while (pos != end()) {
*pos = foo ();
++pos;
}
5 tane iterator kategorisi var. Bunlar
1. input_iterator_tag - InputIterator yazısına bakınız.
2. output_iterator_tag - Bu yazı.
3. forward_iterator_tag - ForwardIterator yazısına bakınız.
4. bidirectional_iterator_tag,
5. random_access_iterator_tag - RandomAccessIterator yazısına bakınız
forward_iterator_tag,bidirectional_iterator_tag ve random_access_iterator_tag yapıları aynı zamanda output_iterator_tag'den kalıtır.
Açıklaması şöyle
Nasıl TanımlanırAssignment through the same value of an output iterator happens only once: algorithms on output iterators must be single-pass algorithms.
Sınıf şöyle tanımlanır
class infix_ostream_iterator :
public std::iterator<std::output_iterator_tag,void,void,void,void>
{...}
operator copy assignment metoduBu metod tanımlı değilse VS 2012'den itibaren hata alırız.
operator = metodu
Output Iterator sınıfının en önemli metodu = operatörüdür. Burada yapılması gereken iş yapılır.
infix_ostream_iterator<T,charT,traits>& operator=(T const &item)
{
...
return *this;
}
operator * metoduŞöyle yaparız. Bu metodu genelde doldurmaya gerek olmaz.
infix_ostream_iterator<T,charT,traits> &operator*() {
return *this;
}
operator ++ metoduŞöyle yaparız. Bu metodu doldurmak gerekir.
infix_ostream_iterator<T,charT,traits> &operator++() {
return *this;
}
Şöyle yaparız. Bu metodu genelde doldurmaya gerek olmaz.
infix_ostream_iterator<T,charT,traits> &operator++() {
return *this;
}
Yazma İşlemiAşağıdaki kod parçası end() kullanmadığı için doğrudur."Output iterators can only step forward with write access. Writing data without checking for end of sequence is correct. In fact, you can't operate an output iterator with an end iterator because output iterators do not have to provide a comparison operation."
while (true) {
*pos = foo ();
++pos;
}
Bu kod parçası ise end() kullandığı için output iterator açısından imkansızdır.
while (pos != end()) {
*pos = foo ();
++pos;
}
Hiç yorum yok:
Yorum Gönder