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

Реализовать итератор в стиле STL - C++

Восстановить пароль Регистрация
 
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 106
17.10.2016, 15:17     Реализовать итератор в стиле STL #1
Подскажите как найти решение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };
 
int main(int argc, char **argv) {
   int _val = 0;
   Iterator *_it = new Iterator(5);
   
   _val = *_it;
//---
   return 0;
}
при компилировании ошибка:
error: cannot convert ‘Iterator’ to ‘int’ in assignment
_val = *_it;
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Selot
155 / 91 / 23
Регистрация: 19.01.2010
Сообщений: 368
Завершенные тесты: 1
17.10.2016, 15:20     Реализовать итератор в стиле STL #2
а причем тут operator*?
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 106
17.10.2016, 15:26  [ТС]     Реализовать итератор в стиле STL #3
ну ведь перегружаю то я '*'
но поправьте меня как правильно будет, если я ошибаюсь
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
17.10.2016, 15:46     Реализовать итератор в стиле STL #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
_val = **_it;
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 106
17.10.2016, 15:51  [ТС]     Реализовать итератор в стиле STL #5
SpBerkut, спасибо
совсем из головы вылетело, что нужно еще разыменовывать указатель т.к. объект сам по себе указатель, спасибо так работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Iterator
  {
   int m_value;
public:
   Iterator(const int val) : m_value(val) { }
   int operator*() { return m_value; }
  };
 
int main(int argc, char **argv) {
   int _val = 0;
   Iterator *_it = new Iterator(5);
   
   _val = *_it;
//---
   return 0;
}
Selot
155 / 91 / 23
Регистрация: 19.01.2010
Сообщений: 368
Завершенные тесты: 1
17.10.2016, 15:54     Реализовать итератор в стиле STL #6
operator*() используется для умножения объектов одного класса. А если более конкретно, то определенных полей класса по заданным правилам.
C++
1
2
3
4
Iterator operator*(const Iterator &src) 
{ 
     return Iterator(this->m_value * src.m_value); 
}
и вызов соответсвтенно:
C++
1
2
3
4
Iterator it1(5);
Iterator it2(10);
Iterator it3(0);
it3 = it1 * it2;
Цитата Сообщение от gomodril Посмотреть сообщение
_val = *_it;
это разыменование указателя, а не умножение, как вы, может быть, подумали.

Чтоб получить доступ к приватному полю "m_value", определятеся в классе геттер:
class Iterator
{
int m_value;
public:

int get_value() const { return m_value; }
Iterator(const int val) : m_value(val) { }
Iterator operator*(const Iterator &src)
{
return Iterator(this->m_value * src.m_value);
}
};
и в итоге вызов будет такой:
C++
1
2
3
4
5
6
int _val = 0;
Iterator it1(5);
Iterator it2(10);
Iterator it3(0);
it3 = it1 * it2;
_val = it3.get_value();
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 106
17.10.2016, 16:01  [ТС]     Реализовать итератор в стиле STL #7
Selot, нужен был вариант в стиле итераторов stl, а в исходниках stl запутался, вот и решил "изобрести" велосипед, но не смог ))) а SpBerkut это сразу понял и помог )))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2016, 16:02     Реализовать итератор в стиле STL
Еще ссылки по теме:

C++ Реализовать итератор для самодельного списка
C++ STL итератор на конец контейнера
Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка C++
C++ Реализовать (без использования контейнеров STL) Б-дерево со вставкой и удалением элементов
Реализовать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SpBerkut
Объявлятель переменных
 Аватар для SpBerkut
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
17.10.2016, 16:02     Реализовать итератор в стиле STL #8
Цитата Сообщение от gomodril Посмотреть сообщение
а SpBerkut это сразу понял и помог )))
Вы меня прям в краску вогнали.
Yandex
Объявления
17.10.2016, 16:02     Реализовать итератор в стиле STL
Ответ Создать тему
Опции темы

Текущее время: 23:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru