Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/38: Рейтинг темы: голосов - 38, средняя оценка - 4.76
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
1

STL vector,list

29.06.2009, 17:04. Показов 7327. Ответов 2
Метки нет (Все метки)

У меня 2 вопроса:
1) можете рассказать,как подробно работает reverse_iterator?Создал вектор,хочу его распечатать в обратном порядке следования индексов,а он мне вообще то ошибку выдает,что я вышел за пределы массива,то печатает не в обратном порядке.
В литературе как работает подробно reverse_iterator не нашел,везде просто написано,что такой итератор. Смотрел "STL для программистов на C++ (Аммерааль)","C++ Стандартная библиотека. Для профессионалов (Джосьютис)" и Страуструпа.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    std::vector<int> arr;
    arr.push_back(1);
    arr.push_back(2);
    arr.push_back(3);
    arr.push_back(4);
    arr.push_back(5);
    arr.push_back(6);
    arr.push_back(7);
    arr.push_back(8);
    arr.push_back(9);
    arr.push_back(10);
    arr.push_back(1);
 
    for(std::vector<int>::reverse_iterator i = arr.rbegin(); i!=arr.rend(); ++i)
        std::cout << arr[(*i)] << std::endl;
2) Вот класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class LongDigit: public std::list<int>
{
public:
    LongDigit()  {}
    ~LongDigit() {}
    friend std::istream& operator>>(std::istream & in, const LongDigit & dig);
    friend std::ostream& operator<<(std::ostream & out, const LongDigit & dig);
 
    // addition
    LongDigit operator+(const LongDigit & longDig);
 
 
private:
    std::list<int> list_;
};
И интерфейс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
///////////////////////////////////////////////////////////////////////////////
LongDigit LongDigit::operator+(const LongDigit & longDig) 
{
    unsigned int position1 = longDig.list_.size(),position2 = list_.size();
    std::list<int>::reverse_iterator i;
 
    if(position1 > position2)
        for(i = longDig.list_.rbegin(); i < longDig.list_.rend(); ++i)
        {
                          // do smth
        }
    else {
        for(i = longDig.list_.rbegin(); i < longDig.list_.rend(); ++i)
        {
                         // do smth
        }
    }
    return temp;
 
}
Выдает ошибку:
Error 2 error C2664: 'std::_Revranit<_RanIt,_Base>::_Revranit(_RanIt)' : cannot convert parameter 1 from 'std::list<_Ty>::_Const_iterator<_Secure_validation>' to 'std::list<_Ty>::_Iterator<_Secure_validation>' c:\program files\microsoft visual studio 9.0\vc\include\xutility 2125

Не пойму почему... Иногда туплю и очевидные ошибки не нахожу.Сначала у меня был здесь вектор,потом поменял на list.Но все равно ошибка осталась,даже когда наследовал от list класс,все равно не помогло избежать ошибки.Подскажите.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2009, 17:04
Ответы с готовыми решениями:

Задача по контейнерам stl vector и list
Дан сортированный по убыванию массив int'ов размером 100 элементов. Значение начального...

Работа с STL. Поменять vector на list
Программа должна быть написана так, чтобы достаточно было заменить в одном месте vector на list и...

Работа с STL list + пропись List.h
Здравствуйте! Помогите, пожалуйста, разобраться с STL list. Нужно сделать программу в которой...

vector STL
class data { public: char path; char net; char metric; int number; // для укаания строки...

2
Эксперт С++
2337 / 1710 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
29.06.2009, 18:04 2
Итератор, грубо говоря, является указателем на элемент вектора (а не значением индекса), т.е. если Вам нужно обратиться к элементу, на который он указывает, нужно просто его разименовать, т.е. *i без всяких arr[(*i)].
C++
1
2
for(std::vector<int>::reverse_iterator i = arr.rbegin(); i!=arr.rend(); ++i)
  std::cout << *i << std::endl;
reverse_iterator по сути является обычным итератором, просто операции инкремента и ему подобные сдвигают итератор не на следующий элемент, а на предыдущий, а декремента - на следующий.
0
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
29.06.2009, 20:37  [ТС] 3
все,спасибо,разобрался

Добавлено через 20 минут 26 секунд
2 ошибку нашел сам
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2009, 20:37

Работа с STL vector
Добрый день! Прошу объяснить следующие моменты связанные с &lt;vector&gt; (почему ругается студия,...

STL vector iterator
есть список в списке... ..точнее: vector &lt;Class1*&gt; mapClass1; а уже в Class1 определён вектор...

STL::vector (метод resize)
Здравствуйте ,у меня возник один вопрос по поводу метода resize() ... Вот пример кода ...

STL vector index operator
что такое индекс оператор у контейнера вектор ??? по заданию надо задать доступ к произвольному...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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