С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/64: Рейтинг темы: голосов - 64, средняя оценка - 4.61
1 / 1 / 1
Регистрация: 25.04.2012
Сообщений: 59
1

Реализация Map итератора

20.02.2017, 16:44. Показов 12079. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно ли показать реализацию и применение простейшего итератора для данного контейнера, который я создал?

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
#include<iostream>
 
template <typename T1, typename T2>
struct T
{
    T1 key;
    T2 dat;
};
 
template <typename T1, typename T2>
class Map
{
    size_t Size;
    T<T1,T2>* data;
public:
 
    Map();                  //Конструктор по умолчанию
    Map(std::string);       //Конструктор с параметрами
    size_t size();          //Размер ассоциативного массива
    void insert(T1, T2);    //Добавить ключ-значение
    void remove(T1);        //Удалить ключ-значение по ключу
    void remove_i(size_t);  //Удалить ключ-значение по индексу
    void show();            //Вывод на экран всех слотов
    void show_slot(size_t); //Вывести на экран по индексу ключ-значение
    void clear();           //Уничтожить ассоциативный массив
 
    bool check_key(T1);                 //Проверить ключ на существование
    T2 get_data(T1);                    //Получить значение по ключу
    void set_key(size_t, T1 value);     //Задать ключ по индексу
    size_t get_index(T1);               //Получить индекс по ключу
 
    Map<T1,T2>& operator=(Map<T1,T2> const &map2); //Перегрузка оператора присваивания
 
};


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
#include <iostream>
#include "map.h"
#include "map.cpp"
 
 
int main()
{
    Map<int, std::string> A;
    A.insert(12,"k");
    A.insert(51,"h");
    A.insert(72,"t");
    A.insert(31,"f");
    std::cout << "All elements of map A: " << std::endl;
    A.show();
    std::cout << std::endl;
 
    A.remove(72);
    A.remove(51);
    std::cout << "All elements of map A after remove: " << std::endl;
    A.show();
    std::cout << std::endl;
 
    std::cout << "Check elements for exist: ";
    std::cout << A.check_key(51) << std::endl;
    std::cout << "Get data for key 31: ";
    std::cout << A.get_data(31) << std::endl;
    std::cout << "Get slot for infex 0: ";
    A.show_slot(0);
    std::cout << std::endl;
 
    Map<int, std::string> B;
    B = A;
    std::cout << "All elements of map B after B=A: " << std::endl;
    B.show();
    std::cout << std::endl;
 
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2017, 16:44
Ответы с готовыми решениями:

Создание итератора map сдвинутого на n
Доброго времени суток :) Допустим есть функция которая вернет константную ссылку на элемент. ...

Возврат итератора map из шаблонной функции
Собственно, вот: Вызов функции: Find&lt;map&lt;string, Circle*&gt;, map&lt;string,...

реализация итератора
Реализация класса List и его итератора: #ifndef LIST_H #define LIST_H #include&lt;iostream&gt; ...

Упрощенная реализация итератора
- Доброго дня завсегдатаи ! Видел на Вашем форуме упрошенную реализацию контейнера std::vector. ...

4
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.02.2017, 17:22 2
Ишук, глянь сюда. Там представлен простейший пример итератора и методов, которые там должны быть. В твоем случае внутри итератора будет хранится указатель на какой-то элемент в массиве data, или на весь контейнер - зависит от реализации твоего Map и как ты его хочешь обходить.

Цитата Сообщение от Ишук Посмотреть сообщение
#include "map.cpp"
Что это за фигня? Так делать нельзя.
0
1 / 1 / 1
Регистрация: 25.04.2012
Сообщений: 59
20.02.2017, 18:15  [ТС] 3
Попытался вывести данные, но программа вылетает, выводя на экран только 1-й элемент

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct iterator
    {
        T2 *ptr;
        iterator (T2* ptr_=0) : ptr(ptr_) {}
        T2& operator*() { return *ptr; }
        T2* operator->() { return ptr; }
        T2* operator++() { return ++ptr; }
        T2* operator--() { return --ptr; }
        bool operator==(const iterator& other) const { return ptr == other.ptr; }
        bool operator!=(const iterator& other) const { return !(*this == other); }
    };
    iterator begin () { return &data->dat; }
    iterator end () { return &data->dat+Size; }
C++
1
2
    for (Map<int, std::string>::iterator it = A.begin(); it != A.end(); ++it)
            std::cout<<*it<<"\n";
А при попытке вывести ключи выводится только первый ключ верно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct iterator
    {
        T1 *ptr;
        iterator (T2* ptr_=0) : ptr(ptr_) {}
        T1& operator*() { return *ptr; }
        T1* operator->() { return ptr; }
        T1* operator++() { return ++ptr; }
        T1* operator--() { return --ptr; }
        bool operator==(const iterator& other) const { return ptr == other.ptr; }
        bool operator!=(const iterator& other) const { return !(*this == other); }
    };
    iterator begin () { return &data->key; }
    iterator end () { return &data->key+Size; }
C++
1
2
    for (Map<int, std::string>::iterator it = A.begin(); it != A.end(); ++it)
            std::cout<<*it<<"\n";
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
20.02.2017, 18:34 4
Ишук, сделай лучше итератор с указателем на T<T1,T2>. И чтобы он работал со стандартной библиотекой, нужно все же отнаследоваться от std::iterator как в примере (подправив типы согласно документации).

Цитата Сообщение от Ишук Посмотреть сообщение
C++
1
T1* operator++() { return ++ptr; } T1* operator--() { return --ptr; }
Если бы ты посмотрел пример по ссылке, то понял бы, что тип возвращаемого значения тут неверный.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
20.02.2017, 18:35 5
Цитата Сообщение от Ишук Посмотреть сообщение
Можно ли показать реализацию и применение простейшего итератора для данного контейнера, который я создал?
C++
1
typedef T<T1,T2>* iterator;
0
20.02.2017, 18:35
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2017, 18:35
Помогаю со студенческими работами здесь

Реализация итератора для шаблонного класса
Изучаю С++. Решил реализовать свой вариант контейнера vector. Класс решил сделать шаблонным. Чтобы...

Реализация контейнера по типу map
Необходимо создать пользовательский класс по типу map, для реализации &quot;словаря&quot;. Можете помочь с...

Map, как получить значение итератора
Помогите разобраться, как сохранить взятое значение из списка? Явно что-то не так делаю spisok...

Правильна ли такая реализация итератора?
Доброе время суток. Есть класс очередь, реализован через массив, добавление идет просто подряд за...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru