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

Работа с итераторами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как запретить добавление данных в массив при повторении? С++ http://www.cyberforum.ru/cpp-beginners/thread911019.html
Стоит задача: ...Реализовать функцию добавления данных в массив. Если введена информация об авторе книги и ее названии, которые уже имеются в каталоге, данные не добавлять... Подскажите, пожалуйста, как запретить добавление данных в массив при повторении?
C++ [C++] Error: 'FindeMP2' was not declared in this scope #include <math.h> #include <iostream> #include <iomanip> #include <conio.h> using namespace std; double Fx(double x) { return x*x - 100*sin(x); http://www.cyberforum.ru/cpp-beginners/thread910995.html
Как настроить русский шрифт C++
Здравствуйте, подскажите пожалуйста, как настроить отображение русских букв:
C++ Ошибка в цикле
Помогите найти ошибку в цикле, пожалуйста #include <stdio.h> #include <math.h> #include <conio.h> #include <windows.h> main() {
C++ Как создать в файле массив указателей фиксированной размерности на строки текста? http://www.cyberforum.ru/cpp-beginners/thread910960.html
подскажите пожалуйста! есть работающая программа, но реализована она неправильно и я не знаю как сделать правильно..(я уже пыталась ее сдавать, но мне сказали что условия не выполнены) по условию программа создает в файле массив указателей фиксированной размерности на строки текста. Размерность массива находится в начале файла, сами строки также хранятся в файле в виде записей переменной...
C++ Ошибка в программе Вот написал "программу" (типа прикол). Вот код: #include <iostream> #include <cstdlib> using namespace std; void Shit() { char Yes; подробнее

Показать сообщение отдельно
PG94
2 / 2 / 0
Регистрация: 15.01.2012
Сообщений: 181
25.06.2013, 21:22  [ТС]     Работа с итераторами
Спасибо, что откликнулись. Ниже полный текст программы, запускал в Visul Studio, заканчивал ввод с помощью Ctrl + Z. После вывода выдается следующий текст:
Debug assertion faild!...Exprission: vector iterator is not dereferencable
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
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<list>
#include<array>
using namespace std;
 
typedef vector<char> Line;  
 
class Text_iterator {               //итератор для перемещения по документу
    list<Line>::iterator ln;
    Line::iterator pos;
public:
    Text_iterator(list<Line>::iterator ll, Line::iterator pp)
        :ln(ll), pos(pp) { }
 
    char& operator*() { return *pos; }
    Text_iterator& operator++();
    bool operator==(const Text_iterator& other) const;
    bool operator!=(const Text_iterator& other) const { return !(*this==other); }
};
 
Text_iterator& Text_iterator::operator++()
{
    if (pos==(*ln).end()) {
        ++ln;            
        pos = (*ln).begin();
    }
    else
        ++pos;
    return *this;
}
 
bool Text_iterator::operator==(const Text_iterator& other) const
{ 
    return ln == other.ln && pos == other.pos;
}
 
 
struct Document {
    list<Line> line; 
    Document() { line.push_back(Line()); }
 
    Text_iterator begin() 
    { return Text_iterator(line.begin(), line.begin()->begin()); }    
 
    Text_iterator end()        
    { 
        list<Line>::iterator last = line.end(); 
        --last;
        Line::iterator last_pos=last->end();
        --last_pos;
        return Text_iterator(last,last_pos);
    }
};
 
istream& operator>>(istream& is, Document& d)
{
    char ch;
    int nline(1);
    while (is.get(ch)) {
        cout<<nline++<<": "<<ch<<endl;
        d.line.back().push_back(ch);    
        if (ch=='\n') {                     //'\n' показатель конца строки
            d.line.push_back(Line());  
        }
    }
    d.line.back().push_back('\n');  //для описания end() в Document
    return is;
}
 
void print(Document& d)
{
    for (Text_iterator p = d.begin(); p!=d.end(); ++p)  cout << *p;
}
 
int main()
try {
    Document d;
    
    cin>>d;
    cout<<"result:\n";
    print(d);
 
    system("pause");
    return 0;
}
catch(runtime_error& e) {
    cerr<<e.what()<<endl;
    system("pause");
    return 1;
}
 
Текущее время: 23:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru