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

Собственный класс итератора - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычисление функций с использованием их разложения в степенной ряд http://www.cyberforum.ru/cpp-beginners/thread903494.html
Помогите пожалуйста исправить прогрограмму (С++) Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях: а) для заданного n; б) для заданной точности е(е=0.0001). Для сравнения найти точное значение функции. вот что получилось #include <iostream>
C++ Сохранить данные в файл Сделал такое сохранение, С++ не ругается и вроде должен выводить, но куда этот файл сохраняется? Писал для класса Book Book pers; // создать объект pers.Show(); // получить данные // создать объект ofstream ofstream outfile("PERSON.txt", ios::binary); // записать в файл outfile.write(reinterpret_cast<char*>(&pers), sizeof(pers)); outfile.close(); Добавлено через 9 минут http://www.cyberforum.ru/cpp-beginners/thread903490.html
Работа со строками, поиск, запись C++
Дорогие друзья, пишу программу. При написании возникли проблемы, а точнее столь слабые познания в с++. Имеем .xml файл вида: <Cell><Data ss:Type="String">элемент 1001</Data></Cell> <Cell><Data ss:Type="String">элемент 100111</Data></Cell> <Cell><Data ss:Type="String">элемент 10012</Data></Cell> <Cell><Data ss:Type="String">элемент 1001411</Data></Cell> <Cell><Data...
1. Написать программу работы с условным оператором if в соответствии с номером своего варианта (Таблица 5.1). 2. Написать программу с использованием о C++
1. Написать программу работы с условным оператором if 2. Написать программу с использованием оператора switch Написать программу вычисления суммы модулей двух введенных чисел Написать программу сравнения введенного числа со значениями 0, 4,8,9 и 30
C++ Вычислить сумму http://www.cyberforum.ru/cpp-beginners/thread903471.html
1. Написать программу работы с операторами циклов while и for
C++ Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от x1 до x2 c шагом dx (x1, x2, dx задаются пользователем) с точностью ε (также задается пользователем). Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда. Для решения задания использовать цикл for, который контролирует... подробнее

Показать сообщение отдельно
MrLinch
 Аватар для MrLinch
12 / 10 / 6
Регистрация: 23.12.2012
Сообщений: 51
16.06.2013, 16:38     Собственный класс итератора
Добрый день! Пишу сейчас одну библиотеку (не использующею STL и другие библиотеки) и для контейнеров решил написать класс итератора:
Кликните здесь для просмотра всего текста

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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/// Представляет поэлементный доступ к элементам коллекции
/// @param T - тип элементов коллекции
template<typename T>
class Iterator {
public:
    typedef T* pointer;          //!< Указатель на значение
    typedef T reference;         //!< Ccылка на значение
    typedef T value_type;        //!< Предопределенный тип для T
    typedef matx::size_t dist_t; //!< Тип для представления расстояния между итераторами
 
    Iterator();        //!< Конструктор по умолчанию
    Iterator(pointer); //!< Конструктор с параметром
    Iterator(const Iterator&); //!< Конструктор копий
 
    Iterator& operator = (const Iterator &);        //!< Оператор присваивания
 
    bool      operator == (const Iterator &) const; //!< Оператор сравнения
    bool      operator != (const Iterator &) const; //!< Оператор не-сравнения
 
    reference operator *  () const; //!< Разыменование итератора
    pointer   operator -> () const; //!< Косвенное обращение
    /// @bug only prefix
    Iterator& operator ++ ();    //!< prefix-incerment
    //Iterator& operator ++ (int); //!< postfix-incerment
    Iterator& operator -- ();    //!< prefix-decerment
    //Iterator& operator -- (int); //!< postfix-decerment
 
    Iterator  operator +  (const dist_t) const; //!< Плюс число
    Iterator  operator -  (const dist_t) const; //!< Минус число
    dist_t    operator -  (const Iterator&) const; //!< Расстояние до другого указателя
 
    bool      operator <  (const Iterator&) const; //!< bool, если этот указатель имеет адрес меньше чем второй
    bool      operator <= (const Iterator&) const; //!< bool, если этот указатель имеет адрес меньше чем второй, или они равны
    bool      operator >  (const Iterator&) const; //!< bool, если этот указатель имеет адрес больше чем второй
    bool      operator >= (const Iterator&) const; //!< bool, если этот указатель имеет адрес больше чем второй, или они равны
 
    Iterator& operator += (const dist_t); //!< Увеличить адрес текущего вектора
    Iterator& operator -= (const dist_t); //!< Уменьшить адрес текущего вектора
 
    reference operator [] (const dist_t) const; //!< Поэлементный доступ
protected:
    pointer ptr;       //!< C-like указатель
};
 
template<typename T>
Iterator<T>::Iterator() {
    ptr = 0;
}
 
template<typename T>
Iterator<T>::Iterator(pointer ptrToElement) {
    ptr = ptrToElement;
}
 
template<typename T>
Iterator<T>::Iterator(const Iterator<T> &it) {
    ptr = it.ptr;
}
 
template<typename T>
Iterator<T>& Iterator<T>::operator = (const Iterator<T> &it) {
    ptr = it.ptr;
    return *this;
}
 
template<typename T>
bool Iterator<T>::operator == (const Iterator<T> &it) const {
    return (ptr == it.ptr);
}
 
template<typename T>
bool Iterator<T>::operator != (const Iterator<T> &it) const {
    return not(ptr == it.ptr);
}
 
template<typename T>
typename Iterator<T>::reference Iterator<T>::operator * () const {
    return *ptr;
}
 
template<typename T>
typename Iterator<T>::pointer Iterator<T>::operator -> () const {
    return &*ptr;
}
 
template<typename T>
Iterator<T>& Iterator<T>::operator ++ () {
    Iterator tmp(*this);
    ptr++;
    return *this;
}
 
//template<typename T>
//Iterator<T>& Iterator<T>::operator ++ (int) {
//  ptr++;
//  return *this;
//}
 
template<typename T>
Iterator<T>& Iterator<T>::operator -- () {
    ptr--;
    return *this;
}
 
//template<typename T>
//Iterator<T>& Iterator<T>::operator -- (int) {
//  ptr--;
//  return *this;
//}
 
template<typename T>
Iterator<T> Iterator<T>::operator + (const dist_t n) const {
    return Iterator<T>(ptr + n);
}
 
template<typename T>
Iterator<T> Iterator<T>::operator - (const dist_t n) const {
    return Iterator<T>(ptr - n);
}
 
template<typename T>
typename Iterator<T>::dist_t Iterator<T>::operator - (const Iterator<T> &it) const {
    return ptr - it.ptr;
}
 
template<typename T>
bool Iterator<T>::operator < (const Iterator<T> &it) const {
    return (ptr < it.ptr);
}
 
template<typename T>
bool Iterator<T>::operator <= (const Iterator<T> &it) const {
    return (ptr < it.ptr) or (ptr == it.ptr);
}
 
 
template<typename T>
bool Iterator<T>::operator > (const Iterator<T> &it) const {
    return (ptr > it.ptr);
}
 
template<typename T>
bool Iterator<T>::operator >= (const Iterator<T> &it) const {
    return (ptr > it.ptr) or (ptr == it.ptr);
}
 
template<typename T>
Iterator<T>& Iterator<T>::operator += (const dist_t n) {
    ptr += n;
    return *this;
}
 
template<typename T>
Iterator<T>& Iterator<T>::operator -= (const dist_t n) {
    ptr -= n;
    return *this;
}
 
template<typename T>
typename Iterator<T>::reference Iterator<T>::operator [] (const dist_t index) const {
    return *(ptr + index);
}


Все вроде более менее работает, вот только ошибка в такой конструкции:
C++
1
2
3
4
// Написано для примера так я его использовать точно не буду :)
int array[10];
Iterator<int> i = array;
*i = 10;
выскакивает "ошибка: lvalue required as left operand of assignment", компилятор GCC.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru