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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 130
#1

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

17.10.2016, 15:17. Просмотров 205. Ответов 7
Метки нет (Все метки)

Подскажите как найти решение.
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2016, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать итератор в стиле STL (C++):

Реализовать двусвязный список (list), итератор (iterator) и константный итератор (сonst_iterator) для списка - C++
не могу понять что должно быть результатом. может подскажете примеры? пожалуйста. Задание: Реализовать двусвязный список (list),...

STL итератор на конец контейнера - C++
Подскажите пожалуйста у меня задача сделать дерево и слизать интерфейс с STL std::map. Вопрос в следующем: когда мы обходим map итератором...

Как более менее правильно написать итератор(не STL). - C++
Вот, например, пишу класс и всегда помню советы типа "скрывайте реализацию класса" или "если функция по идее не должна изменять данные...

Написать свой итератор, чтобы алгоритмы STL работали с моим классом - C++
Как написать свой итератор, чтобы действовал как стандартный и мог использовать STL алгоритмы. (У меня есть класс двусвязный списко...

Как можно получить итератор на элемент обрабатываемый в лямбде в функции for_each?STL - C++
Как можно получить итератор на элемент обрабатываемый в лямбде? for_each(arr.begin(), arr.end(), (char n) {if (n == dubl)...

Реализовать итератор для самодельного списка - C++
Нужно узнать что из себя представляет итератор. Посмотреть его реализацию. (Желательно попроще, основное) Кто то может объяснить что он...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Selot
172 / 108 / 28
Регистрация: 19.01.2010
Сообщений: 428
Завершенные тесты: 1
17.10.2016, 15:20 #2
а причем тут operator*?
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 130
17.10.2016, 15:26  [ТС] #3
ну ведь перегружаю то я '*'
но поправьте меня как правильно будет, если я ошибаюсь
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
17.10.2016, 15:46 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
_val = **_it;
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 130
17.10.2016, 15:51  [ТС] #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
172 / 108 / 28
Регистрация: 19.01.2010
Сообщений: 428
Завершенные тесты: 1
17.10.2016, 15:54 #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
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 130
17.10.2016, 16:01  [ТС] #7
Selot, нужен был вариант в стиле итераторов stl, а в исходниках stl запутался, вот и решил "изобрести" велосипед, но не смог ))) а SpBerkut это сразу понял и помог )))
SpBerkut
Объявлятель переменных
908 / 234 / 113
Регистрация: 24.09.2011
Сообщений: 875
Завершенные тесты: 2
17.10.2016, 16:02 #8
Цитата Сообщение от gomodril Посмотреть сообщение
а SpBerkut это сразу понял и помог )))
Вы меня прям в краску вогнали.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2016, 16:02
Привет! Вот еще темы с ответами:

Реализовать двунаправленный список в духе списка из STL - C++
Все-таки видимо у меня всегда останутся с этим проблемы. Само определение скидывать не буду, я пытаюсь сделать, что-то вроде STL-ного...

Реализовать (без использования контейнеров STL) Б-дерево со вставкой и удалением элементов - C++
Здравствуйте! Очень нужна реализация Б-дерева на С или С++ со вставкой и удалением элементов, но без использования контейнеров из STL....

И снова STL. Реализовать сохранение массива в файл, чтоб можно было загружать данные - C++
Имеется контейнер vector объектов класса с полями разного типа, необходимо реализовать сохранение массива в файл, чтоб можно было загружать...

Реализовать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL - C++
Создать пользовательские классы - дек, стек (LIFO), очередь (FIFO) на базе класса list библиотеки STL. Написать тестирующую программу,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.10.2016, 16:02
Ответ Создать тему
Опции темы

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