Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> операторы для list<T> 
:(
    Опции темы
wallstreet
Дата 11.11.2011, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.8.2011

Репутация: нет
Всего: нет



Вобщем it и end - это итераторы списка.
задача предельно проста выполнить цикл до конца (it<end) списка v 
Но компилятор выдает ошибку С2784 и ругается на оператор "<" 
Код

for(y=size_Toolbar, it=v.begin(), end=v.end(); it<end; ++it, y+=LineHeight)

есть ли какая-то функция для сравнения или я что-то делаю не так?
Кстати с векторами работает все на ура.
PM MAIL   Вверх
xvr
Дата 11.11.2011, 11:54 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Итераторы сравнивают на неравно '!='. Это будет работать для всех итераторов. Сравнение на < > - только для random access итераторов, а это далеко не все

PM MAIL   Вверх
wallstreet
Дата 11.11.2011, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.8.2011

Репутация: нет
Всего: нет



Спасибо большое, работает.
Но тему с random access хотелось бы изучить.  
Если можете поподрообнее расскажите в двух словах, ато много чего непонятно из описания в разных источника. 
Вот к примеру пишут:
Цитата

Класс или встроенный тип X удовлетворяет требованиям итераторов произвольного доступа, если к таблице, которая определяет двунаправленные итераторы, мы добавим следующие строки:

далее следует таблица с выражениями, которые, собственно, и надо добавить, возвращаемые значения и тд. Только вот что это за таблица такая, которая определяет двунаправленные итераторы? Куда добавлять, если я хочу, что бы мой итератор мог использовать операторы +=, <>, +  и тд.?
PM MAIL   Вверх
borisbn
Дата 11.11.2011, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 21
Всего: 135



Цитата(wallstreet @  11.11.2011,  12:30 Найти цитируемый пост)
Куда добавлять, если я хочу, что бы мой итератор мог использовать операторы +=, <>, +  и тд.?

В твой итератор
 smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
wallstreet
Дата 11.11.2011, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.8.2011

Репутация: нет
Всего: нет



если это возможно, то не могли бы на примере показать как сделать свой итератор, итератором произвольного доступа?

Код

std::list<std::string> v;
std::list<std::string>::iterator st;
st = v.begin();
if(s<v.end())
      true;
else
      false;

PM MAIL   Вверх
bsa
Дата 11.11.2011, 13:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код
#include <iterator>
...
template<class T>
class MyIterator : public std::iterator<std::random_access_iterator_tag,T> {
...
};


Добавлено через 5 минут и 3 секунды
Тебе итератор произвольного доступа необходим только для использования в конструкциях вида it < c.end()? Если да, то ты идешь не в том направлении. Так как СТАНДАРТНЫМ СРЕДСТВОМ СРАВНЕНИЯ ИТЕРАТОРОВ ЯВЛЯЮТСЯ operator== и operator!=. Более того, они работают быстрее, чем operator< и operator>. Если очень хочешь, то можешь использовать std::distance(it, end) > 0 вместо своей конструкции... Но не удивляйся, если на контейнерах, не подразумевающих случайных доступ, ты получишь удручающую производительность.

Это сообщение отредактировал(а) bsa - 11.11.2011, 13:51
PM   Вверх
wallstreet
Дата 11.11.2011, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.8.2011

Репутация: нет
Всего: нет



всех балгодарю за участие.
Цитата

Тебе итератор произвольного доступа необходим только для использования в конструкциях вида it < c.end()?

конечно же нет)

Кстати если вместо списка использовать вектор, то подобных ошибок не возникает с операторами <>, почему?
PM MAIL   Вверх
xvr
Дата 11.11.2011, 14:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(wallstreet @  11.11.2011,  14:39 Найти цитируемый пост)
Кстати если вместо списка использовать вектор, то подобных ошибок не возникает с операторами <>, почему?

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

Итератор с произвольным доступом - это такой итератор, который можно за одну операцию переместить на любое количество позиций. Элементы в векторе лежат в одном куске памяти, а его итератор по сути указатель. Так что имея указатель на любой элемент можно переместится на любой другой, просто прибавив в указателю (итератору) число (на сколько хотим переместится)
В листа элементы лежат в отдельных участках памяти, и у каждого есть указатели на следующий и предыдущий элемент. Поэтому итератор листа может перемещаться только на 1 элемент вперед или назад. Для перемещения на N элементов придется N раз перемещать итератор, а это очень накладно. Поэтому для таких итераторов (не прямого доступа) и не стали определять операции сравнения и сложения с числом


PM MAIL   Вверх
wallstreet
Дата 11.11.2011, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 11.8.2011

Репутация: нет
Всего: нет



всем спасибо. 
в дополнение хотел бы поделиться  ссылкой, где так же более менее доходчиво описывается данная тема ИТЕРАТОРЫ

Это сообщение отредактировал(а) wallstreet - 11.11.2011, 16:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.