Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Динамические структуры данных https://www.cyberforum.ru/ cpp-beginners/ thread574161.html
1.Разработайте динамическую структуру для решения задачи. Последовательность чисел Фибоначчи задается по закономерности: f1 = 1, f2 = 1, ..., fn = fn-1 + fn-2. Распечатайте n чисел Фибоначчи в следующем порядке: сначала все четные, затем все нечетные элементы. 2. Разработайте динамическую структуру для решения задачи. Даны целые числа p и q. Получить все делители числа q, взаимно простые с...
Шаблон очереди + шаблон записи? C++
Реализовать шаблон класса Ocher, реализующий однонаправленную очередь. Для представления элемента очереди использовать шаблон класса Node. Определить функции добавления элемента в очередь и поиска в очереди заданной информации. Задачу №2 написать в двух вариантах: 1) в первом варианте задачу реализовать просто как шаблонный класс; 2) во втором варианте задачу реализовать как класс...
C++ Стирать в Series определенные точки https://www.cyberforum.ru/ cpp-beginners/ thread574127.html
Такой вопрос возник. Можно ли как то стирать на графике в Series определенный кусок графика? А то функция Clear() очищает соответсвенно весь график.
C++ Рекурсия (вычисления интеграла) https://www.cyberforum.ru/ cpp-beginners/ thread574089.html
Есть программа которая вычисляет интеграл методом трапеции и Симпсона, надо усовершенствовать код чтобы функции вычисляли интеграл рекуррентным способом(сделать их рекурсивными) Код: #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <math.h> #include <conio.h> using namespace std; //Определяем константы #define a 0
C++ Плюсы и минусы
В массиве Z(m) найти число чередований знака, то есть число переходов с плюсов на минус или с минуса на плюс. Например, в последовательности 0, -2, 0, -10, 2, -1, 0, 0, 3, 2 ,-3 четыре чередования (как известно, нуль не имеет знака).
C++ Нужны imagehlp.lib https://www.cyberforum.ru/ cpp-beginners/ thread574071.html
Нужны imagehlp.lib для Visual studio 2010, пакет SDK целиком устанавливала, но программа все равно не работает, выдает ошибку
C++ Вывести данные о процессораах через реестр Доброго времени суток уважаемые! Я начинаю только изучать c++ так что не судите строго. Нужно вывести все о процессорах на экран используя реестр, покопался нашел функцию но не совсем получается ее прикрутить, прошу помощи. #include "stdafx.h" #include <Windows.h> using namespace std; void main() { HKEY hKey; REG_SZ m; https://www.cyberforum.ru/ cpp-beginners/ thread574068.html Как сделать, чтобы при вводе в консоли <Enter> не переводил курсор на начало следующей строки? C++
Есть некий ввод символов, организованный через cin.get(char &), или через cin.get(char &, int), или через cin.getline(char &, int). Выведена на консоль, например, фраза: "Введите то-то: ". Дальше мигает курсор (приглашение на ввод). Если вводится не то, что нужно, то на следующей строке выводится то же:"Введите то-то: " и курсор на ввод. Всё получается кроме одного: если просто нажать <Enter>, то...
C++ Класы и масив https://www.cyberforum.ru/ cpp-beginners/ thread574057.html
Если у меня есть, например, такой I клас: class Point { int x, y; Point(int x, int y) { this->x = x; this->y = y;
C++ Дана строка,состоящая из нескольких слов https://www.cyberforum.ru/ cpp-beginners/ thread574053.html
Дана строка, состоящая из нескольких слов,набрать заглавными буквами и разделенный пробелами (один или несколькими).Найти количество слов,которые начинаются и заканчиваются одной и той же буквой.
C++ Распределение памяти. Динамическое выделение памяти
an-1 an-2 ... a2
C++ Задан текстовый файл, каждая строка которого содержит фамилию, имя и отчество, записанные через пробел... https://www.cyberforum.ru/ cpp-beginners/ thread574027.html
Здравствуйте, помогите пожалуйста написать программу. Задан текстовый файл, каждая строка которого содержит фамилию, имя и отчество, записанные через пробел.Обработать файл таким образом, чтобы фамилия записывалась полностью, а далее через пробелследовали инациалы имени и отчества с точками. Записи упорядочить по алфавиту. вот то что пока получилась... #include <StdAfx.h> #include...
19 / 19 / 5
Регистрация: 17.10.2010
Сообщений: 247
14.05.2012, 18:39  [ТС] 0

Итератор для собственного контейнера - C++ - Ответ 3030053

14.05.2012, 18:39. Показов 3828. Ответов 7
Метки (Все метки)

Ответ

расширил возможности моего итератора до random access iterator (коряво в плане того, что при обращении к несуществ. индексу память будет выделяться. с этим справлюсь позже)
но снова вылетают ошибки. что не так?

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
#include "stdafx.h"
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
 
template <class Type> class mas
{
    map <int, Type> m;  
    Type* makeptr(unsigned int ind)
    {
    return  &m.find(ind)->second;
    }   
    Type& make(unsigned int ind)
    {
        return m.find(ind)->second;
    }
    mas (const mas& source)
    {
        m=source.m;
    }
    unsigned int minindex()
    {
        int index=m.begin()->first;
        for(typename map<int,Type>::iterator iterat=m.begin();iterat!=m.end();iterat++)
                    if(index>iterat->first)
                         index=iterat->first;
        return index;
    }
    unsigned int maxindex()
    {
        int index=m.begin()->first;
        for(typename map<int,Type>::iterator iterat=m.begin();iterat!=m.end();iterat++)
                    if(index<iterat->first)
                         index=iterat->first;
        return index;
    }
public:
    class iterator
    {
    public:
      typedef Type value_type;
      typedef Type* pointer;
      typedef ptrdiff_t difference_type;
      typedef Type& reference;
      typedef std::bidirectional_iterator_tag iterator_category;
 
      unsigned int index;
      mas<value_type>* ptr;
      public:
      pointer operator++()
      {
          return ptr->makeptr(index++);
      }
      iterator operator--()
      {
         return ptr->makeptr(index--);
      }
      reference operator*() {return ptr->make(index);}
      pointer operator->()  {return ptr->makeptr(index);}
      bool operator==(const iterator& other) const {return index == other.index; }
      bool operator!=(const iterator& other) const {return !(index == other.index); }
      bool operator<(const  iterator other){return index<other.index;}
      bool operator<=(const iterator other){return index<=other.index;}
      bool operator>(const  iterator other){return index>other.index;}
      bool operator>=(const iterator other){return index>=other.index;}
      pointer operator+ (const int n){return ptr->makeptr(index+n);}
      pointer operator- (const int n){return ptr->makeptr(index-n);}
      pointer operator+=(const int n){return ptr->makeptr(index+=n);}
      pointer operator-=(const int n){return ptr->makeptr(index-=n);}
      reference operator[](int i){return ptr->make(i);}
      operator int(){return index;}
      iterator(int a,mas<value_type>* p)
    
      {
          ptr=p;
          index=a;
      }
   };
    friend class mas::iterator;
   mas(){}
   Type& operator [](int index)
   {
      typename map<int,Type>::iterator i=m.find(index);
      if(i==m.end())
      {
         Type something;
         m.insert(pair<int,Type>(index,something));
         i=m.find(index);
      }
      return i->second;; 
   }
   iterator begin()
   {
       mas::iterator it(minindex(),this);
       return it;
   }
   iterator end()
   {
       mas::iterator it(maxindex()+1,this);
       return it;
   }
};
 
void  fun (int a)
{
    cout << a << " ";
}
int main()
{
    mas <int> mass;
    for(int i=0;i<9;)
        cin>>mass[i++];
    sort(mass.begin(),mass.end(),fun);
    //for(mas<int>::iterator i=mass.begin();i<mass.end();++i)   
     // cout << *i <<" ";
    cout << endl;
    system("pause");
}


Вернуться к обсуждению:
Итератор для собственного контейнера C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2012, 18:39
Готовые ответы и решения:

Итератор для контейнера
Собственно, интересует такой вопрос: &quot;Как создать собственный класс-итератор для контейнера?&quot;....

Итератор контейнера set
Здравствуйте! Каким образом можно изменить значение итератора set на n (кроме вызова ++ n раз)....

Итератор контейнера по связанным типам
Здравствуйте! Есть объект сущность, который содержит в себе некоторое количество компонентов....

STL итератор на конец контейнера
Подскажите пожалуйста у меня задача сделать дерево и слизать интерфейс с STL std::map. Вопрос в...

7
14.05.2012, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2012, 18:39
Помогаю со студенческими работами здесь

Итератор контейнера внутреннего класса шаблона
Следующий код компилируется: struct A { struct B {}; vector&lt;B&gt; vec; vector&lt;B&gt;::iterator...

Вывод контейнера указателей через потоковый итератор
Доброго дня всем. Собственно: std::list&lt;int*&gt; list; list.push_back(new int(45));...

Написание собственного контейнера
Доброго времени суток ! Помогите написать собственный контейнер, основанный на STL, ибо сам с...

Как сделать, чтобы итератор указывал на определенный элемент контейнера?
как сделать, чтобы итератор указывал на, допустим, пятый элемент контейнера (вектора)

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru