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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 5.00
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
#1

Итераторы и обратные итераторы - C++

14.10.2010, 19:09. Просмотров 3967. Ответов 6
Метки нет (Все метки)

У вектора есть два типа итераторов, обычные и обратные итераторы произвольного доступа...
Обычные реализовал, осталось обратные. Решил сначала изучить как это примерно работает. Возникло пара вопросов.

Можем ли мы через обратные итераторы вывести последовательность таким образом, и если да, то как:
{1,2,3,4,5};
На экране
1,2,3,4,5

И соответственно обратный вопрос можем ли мы через обычные итераторы вывести последовательность таким образом, и если да, то как:
{1,2,3,4,5};
На экране
5,4,3,2,1

Я имею ввиду не через алгоритмы, а через прямой вывод. Заранее спасибо за ответы

Но судя по моим попыткам прямого вывода и через copy
C++
1
std::copy(Vect.rend(), Vect.rbegin(), std::ostream_iterator<int>(std::cout, " "));
Видимо это невозможно. Да?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2010, 19:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Итераторы и обратные итераторы (C++):

Потоковые и обратные итераторы - C++
В MSDN написано:&quot;Существующие контейнеры стандартной библиотеки шаблонов также задают типы reverse_iterator и const_reverse_iterator и...

Итераторы - C++
При удалении элемента из списка (list) - ошибка list iterator not decrementable Что делать? for(Iter = npc.begin(); Iter !=...

Итераторы - C++
Как указать не на следующий за последним элемент последовательности, а на последний! end() - следующий за последним Добавлено через...

Итераторы С++ - C++
Как с помощью итераторов работать с массивом объектов класса? И что такое класс Итератор? П.С. Не через вектора

Итераторы в C++ - C++
Помогите плз решить 2 задачи Задача 1 Напишите программу, использующую итераторы при чтении последовательности строк со стандартного...

Итераторы С++ - C++
Помогите, пожалуйста, надо написать две программы Задача 1 Напишите программу, использующую итераторы при чтении последовательности...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
easybudda
Модератор
Эксперт CЭксперт С++
9627 / 5575 / 947
Регистрация: 25.07.2009
Сообщений: 10,710
14.10.2010, 19:19 #2
Цитата Сообщение от Lavroff Посмотреть сообщение
Видимо это невозможно. Да?
Ага, так не выйдет.
C++
1
2
for ( std::vector<int>::reverse_iterator i = Vect.rbegin(); i != Vect.rend(); ++i )
  std::cout << *i << ' ';
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.10.2010, 19:21  [ТС] #3
easybudda, Как раз так то выйдет.
C++
1
2
    for(std::vector<int>::const_reverse_iterator Iter=Vect.rbegin(); Iter!=Vect.rend(); ++Iter)
        std::cout<<*Iter<<' ';
Выводит последовательность в обратном порядке. Т.к. ++Iter реализован как --Iter

MSVS
C++
1
2
3
4
5
6
7
8
9
10
11
12
    _Myt& __CLR_OR_THIS_CALL operator++()
        {   // preincrement
        --current;
        return (*this);
        }
 
    _Myt __CLR_OR_THIS_CALL operator++(int)
        {   // postincrement
        _Myt _Tmp = *this;
        --current;
        return (_Tmp);
        }
0
easybudda
Модератор
Эксперт CЭксперт С++
9627 / 5575 / 947
Регистрация: 25.07.2009
Сообщений: 10,710
14.10.2010, 19:29 #4
Цитата Сообщение от Lavroff Посмотреть сообщение
Как раз так то выйдет.
я про
Цитата Сообщение от Lavroff Посмотреть сообщение
std::copy(Vect.rend(), Vect.rbegin(), std::ostream_iterator<int>(std::cout, " "));
говорил, что не выйдет. А так, как написал, работает.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.10.2010, 19:30  [ТС] #5
easybudda, Извиняюсь) Неверно понял мысль
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
14.10.2010, 20:48 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну, поскольку обратный итератор является адаптером прямого, т.е. тем же классом прямого итератора, только с измененным интерфейсом, то возможности у них одинаковы.
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
////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <vector>
 
typedef  std::vector<int>  T_nums;
 
int main()
{
    std::locale::global(std::locale(""));
    T_nums  nums;
    nums.push_back(1);
    nums.push_back(2);
    nums.push_back(3);
    nums.push_back(4);
    nums.push_back(5);
 
    std::cout << "Вывод обратным итератором:"
              << std::endl;
    for(T_nums::reverse_iterator  rev_it = nums.rend(); rev_it != nums.rbegin();
        --rev_it)
    {
        std::cout << *(rev_it - 1)
                  << std::endl;
    }
 
    std::cout << std::endl
              << "Вывод прямым итератором:"
              << std::endl;
    for(T_nums::iterator  it = nums.end(); it != nums.begin();
        --it)
    {
        std::cout << *(it - 1)
                  << std::endl;
    }
}
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
14.10.2010, 21:36  [ТС] #7
Mr.X, Спасибо. Заодно с помощью этого теста нашел пару багов в своих обратных итераторах.

Добавлено через 30 минут
Вопрос не совсем по тому же поводу но все же...
Возможно ли сделать, чтобы в дебагоокне мой контейнер выглядел так же?

C++
1
        Lst [0]()   std::vector<int,Allocator<int> >
Вместо

C++
1
    Vec {Alloc={...} Arr=0xcccccccc Size=3435973836 ...}    Vector<int,Allocator<int> >
Если да, то как. Поподробнее пожалуйста. Что-то я дико подозреваю, что нужны какие-то мутки с базовым классом для контейнера... Но могу быть и не прав. Подскажите плиз.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2010, 21:36
Привет! Вот еще темы с ответами:

Итераторы - C++
От какого класса наследуются итераторы в STL? Например я создаю класс и для него нужен собственный итератор, совместимый с STL (более...

Итераторы - C++
Добрый день! Начал изучать классы в C++ параллельно с итераторами. Решил сделать простенькую программу, которая создаёт список классов....

итераторы си++ - C++
подскажите пожалуйста какие существуют методы итераторов? и что они делают?

итераторы - C++
ребят помогите плиз vector&lt;double&gt;::iterator t = matrix.begin(); vector&lt;double&gt;::iterator t1 = matrix.end(); for(;t&lt;t1;t++) ...


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

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

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