Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Шаблонный класс Vector и итератор к нему(C++)

28K
29 февраля 2008 года
izenx
17 / / 09.11.2007
STL пользуюсь давно,но вот недавно столкнулся с задачей создания аналога класса vector и итератора для него.
Возникли некоторые вопросы относительно данной задачи.

1-В классе итератора должен хранится указатель на обьект класса вектор или только на информационную часть(массив обьектов шаблонного типа).
2-Отношения между классами:я сделал следующим образом - вектор и итератор дружественны друг другу и в итераторе имеется private конструктор благодаря чему обьекты класса итератор способен создавать только класс вектор(правильна ли такая схема?).Как на ваш взгяд лучше организовать структуру классов?
3-Не мог бы кто нибудь привести пример любого шаблонного контейнер и итератора к нему.
Заранее спасибо.
320
29 февраля 2008 года
m_Valery
1.0K / / 08.01.2007
В FAQ раздела Студентам есть интерфейсный класс для массива, который делал Б.Страуструп,там он сделал и поддержку итераторов. Далее в том же FAQ есть шаблонный класс Vector, обсуждали уже не раз...Теперь в этот шаблонный класс добавь то что делал Страуструп и получишь то что тебе надо.Работы на 5 минут.Все работает и все прекрасно.Разберись.
28K
29 февраля 2008 года
izenx
17 / / 09.11.2007
Спасибо)
Сорри за тему,сразу не догадался полезть в FAQ)
320
29 февраля 2008 года
m_Valery
1.0K / / 08.01.2007
Тебе ,собственно,надо вот 6 строчек добавить в тот класс,что есть в ФАК
 
Код:
...
            typedef T* iterator;
    typedef const T* const_iterator;
    //Поддержка итераторов
    iterator begin(){ return vect; }
    const_iterator begin() const { return vect; }
             iterator end(){ return vect + size; }
    const_iterator end() const { return vect + size; }
...

Дальше используй так:
 
Код:
...
     Vector<int> v(4);                
    //  Ввод компонент вектора
    cin >> v;    
    transform(v.begin(),v.end(),
        v.begin(),
        negate<int>());
     for(Vector<int>::iterator it = v.begin();it != v.end();++it)
     cout<<*it<<' ';
...

Испльзуешь алгоритм transform,например,чтоб преобразовать все элементу к отриц.значениям и цикл для обхода контейнера с помощью итератора.
28K
29 февраля 2008 года
izenx
17 / / 09.11.2007
Стоп!
Мне надо чтоб итератор реализовывался не через обычный указатель на шаблонный тип,а через класс предоставляющий методы индексирования,инкременты,декрименты и разименования.
Вот и вся проблема, я знаю как написать шаблонный контейнер но вот с классом итератора возникла некая путаница((.Что должен содержать в себе класс итератора,непосредственно указатель на обьект класса или на информационную часть контейнера?
28K
29 февраля 2008 года
izenx
17 / / 09.11.2007
Помоему сам препод не до конца понимает что он от меня хочет))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог