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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.69
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
#1

STL vector,list - C++

29.06.2009, 17:04. Просмотров 6773. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2009, 17:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL vector,list (C++):

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

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

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

vector STL - C++
class data { public: char path; char net; char metric; int number; // для укаания строки таблици }; class vertex

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2303 / 1673 / 86
Регистрация: 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
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
29.06.2009, 20:37  [ТС] #3
все,спасибо,разобрался

Добавлено через 20 минут 26 секунд
2 ошибку нашел сам
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2009, 20:37
Привет! Вот еще темы с ответами:

STL vector превратить в stack - C++
Всем привет! немогли бы вы помочь с таким заданием по STL :) Построить вектор &quot;колода карт&quot;. превратить вектор в стэк, прежде...

STL vector запись в файл - C++
Здраствуйте! Такая проблема, есть у меня например vector чисел 1,2,3,4,5 надо записать их в файл. Если записываю так, то выбивает ошибка...

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

Stl vector как массив - C++
Есть функция принимающая указатель на массив и его длину и копирующая его в другой массив определенный указателем. void SetMass(float...


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

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

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