Форум программистов, компьютерный форум CyberForum.ru

Признак окончания потока для буферного итератора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите найти ошибку при копировании вектора http://www.cyberforum.ru/cpp-beginners/thread1145261.html
vector<byte> tmp(8 + Addresses.size() * sizeof(int) + Data.size()); tmp.push_back(Data.data()); Data - vector <byte> byte - unsigned char Ошибка NMClient.cpp: In member function ‘void NMClient::SendData(std::vector<int>, std::vector<unsigned char>)’: NMClient.cpp:88:43: error: invalid conversion from ‘std::vector<unsigned char>::pointer {aka unsigned char*}’ to ‘std::vector<unsigned...
C++ Частичное решение Выведите (через пробел) все четные числа от a до b (включительно). Примеры Входные данные Выходные данные 1 4 http://www.cyberforum.ru/cpp-beginners/thread1145256.html
C++ Структура "Студент"
Составить программу, выводящую на экран сведения о студентах (Ф. И. О., курс, группа, номер зачетки, средний балл). Определить количество студентов, у которых средний балл превышает заданное пользователем значение. Записи (не менее 5) вводятся с клавиатуры, записываются в файл и выводятся на экран.
C++ Класс матрица, написать метод для вычисления определителя
Здравствуйте! Помогите, пожалуйста, разобраться с методом для вычисления определителя. Есть код: int Get_matr(int **u, int r, int I, int J) { int sum=0; int ki = 0; int kj=0; int m=r-1; if (1==r) { sum=**u;
C++ Вывести строку, заключающую каждое слово введенно строки в скобки http://www.cyberforum.ru/cpp-beginners/thread1145197.html
Ввести символьную строку (string). Определить её длину. Создать вторую строку динамически которая состоит из первой строки но переделанной так чтобы каждое слово было в скобках. Вывести на экран первую и вторую строку и их длину. Заранее спасибо.
C++ При вводе даты рождения и номера телефона в структуру выдает неверные данные #pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> #include <conio.h> #include <iostream.h> #include <conio.h> #include <string.h> struct NOTE { char Family; char Name; подробнее

Показать сообщение отдельно
DrOffset
6421 / 3795 / 878
Регистрация: 30.01.2014
Сообщений: 6,584
14.04.2014, 15:13     Признак окончания потока для буферного итератора
Цитата Сообщение от Ilot Посмотреть сообщение
А вот код в последнем посте к сожалению не связывает буфер с выходным потоком
Я предполагал, что ты сможешь это сделать самостоятельно. Нужно было только реализовать должным образом класс console_buffer. Именно он и связывает с консолью. Если это было не понятно из моего ответа, то стоило спросить
А по текущей теме можно предложить еще реализовать свой собственный итератор, который умеет собственный eof:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
template <typename CharT, typename Traits = std::char_traits<CharT> >
class endline_iterator
    : public std::iterator<std::input_iterator_tag, CharT, typename Traits::off_type, CharT *, CharT &>
{
public:
    typedef CharT                                   char_type;
    typedef Traits                                  traits_type;
    typedef typename Traits::int_type               int_type;
    typedef std::basic_streambuf<CharT, Traits>     streambuf_type;
    typedef std::basic_istream<CharT, Traits>       istream_type;
 
private:
    mutable streambuf_type *  sbuf;
    mutable int_type          c;
 
public:
    endline_iterator() throw()
        : sbuf(0), c(eof_value())
    { }
 
    endline_iterator(istream_type & s) throw()
        : sbuf(s.rdbuf()), c(eof_value())
    { }
 
    endline_iterator(streambuf_type * s) throw()
        : sbuf(s), c(eof_value())
    { }
 
    char_type operator*() const
    {
        return traits_type::to_char_type(get());
    }
 
    endline_iterator & operator++()
    {
        if(sbuf)
        {
            sbuf->sbumpc();
            c = eof_value();
        }
        return *this;
    }
 
    endline_iterator operator++(int)
    {
        endline_iterator old = *this;
        if(sbuf)
        {
            old.c = sbuf->sbumpc();
            c = eof_value();
        }
        return old;
    }
 
    bool equal(endline_iterator const & b) const
    {
        return at_eof() == b.at_eof();
    }
 
private:
    static int_type eof_value() // eof - это конец строки
    {
        return int_type('\n');
    }
 
    int_type get() const
    {
        const int_type eof = eof_value();
        int_type ret = eof;
        if(sbuf)
        {
            if (!traits_type::eq_int_type(c, eof))
                ret = c;
            else if (!traits_type::eq_int_type((ret = sbuf->sgetc()), eof))
                c = ret;
            else
                sbuf = 0;
        }
        return ret;
    }
 
    bool at_eof() const
    {
        const int_type eof = eof_value();
        return traits_type::eq_int_type(get(), eof);
    }
};
 
template<typename CharT, typename Traits>
inline 
bool operator==(endline_iterator<CharT, Traits> const & a,
           endline_iterator<CharT, Traits> const & b)
{
    return a.equal(b);
}
 
template<typename CharT, typename Traits>
inline
bool operator!=(endline_iterator<CharT, Traits> const & a,
                endline_iterator<CharT, Traits> const & b)
{
    return !a.equal(b);
}
Добавлено через 4 минуты
Вызов соответственно будет такой:
C++
1
std::copy(endline_iterator<char>(std::cin), endline_iterator<char>(), std::back_inserter(Container));
 
Текущее время: 23:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru