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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос по итераторам, help 
:(
    Опции темы
knut
Дата 5.6.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У неня такая задача ест функц.OnLButtonDown
мне надо заполнить массив поиннами с помашю итератора и нарисовать rectangle :

void CTestView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    using namespase std;
    vector<CPoint>vec;
    vector<CPoint>::iterator it;
    for(it = vec.begin();it!=vec.end();it++)
    {
        CPoint a_point;
        a_point = (*it);
        vec.push_back(point);
        rect.SetRect(vec[*it].x + 5,vec[it].y + 5,vec[it].x - 5,vec[it].y - 5);
    }
    CView::OnLButtonDown(nFlags, point);
}
почему не пашит?
 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
ZeusAtVingrad
Дата 5.6.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(knut @ 5.6.2006,  19:50)
У неня такая задача ест функц.OnLButtonDown
мне надо заполнить массив поиннами с помашю итератора и нарисовать rectangle :

void CTestView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    using namespase std;
    vector<CPoint>vec;
    vector<CPoint>::iterator it;
    for(it = vec.begin();it!=vec.end();it++)
    {
        CPoint a_point;
        a_point = (*it);
        vec.push_back(point);
        rect.SetRect(vec[*it].x + 5,vec[it].y + 5,vec[it].x - 5,vec[it].y - 5);
    }
    CView::OnLButtonDown(nFlags, point);
}
почему не пашит?

Наверное потому что у тебя вектор пустой.

Вот это:
Код

vec[*it].x + 5,vec[it].y + 5,vec[it].x - 5,vec[it].y - 5

вообще что-то несусветное.

И встречный вопрос: А как именно не пашет-то?

ЗЫ: Что-то тебе с языком делать надо. 
PM MAIL   Вверх
MAKCim
Дата 5.6.2006, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Код

for(it = vec.begin();it!=vec.end();it++)


vec.begin()==vec.end() на первой итерации

Добавлено @ 20:42 
Цитата

Код

a_point = (*it);


зачем? 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Succorso
Дата 5.6.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



knut, весь алгоритм с итераторами насмарку:

1) как было сказано выше - у тебя действительно пустой вектор, и ни одной итерации не будет выполнено.
2) в качестве параметра оператору [] нужен интегральный тип "int" (если ты оператор ранее не перегружал), а тут 

Цитата(knut @  5.6.2006,  19:50 Найти цитируемый пост)
vec[*it].x


ты передаёшь, в качестве индекса переменную не типа int, а типа CPoint. Конечно же, компиллятор не может сделать преобразование в int.

А тут 
Цитата(knut @  5.6.2006,  19:50 Найти цитируемый пост)
vec[it].y + 5,vec[it].x - 5,vec[it].y - 5

вообще в качестве индекса ты передаёшь  адрес в памяти. smile  smile  smile 

Советую побольше почитать информации по контейнерам. smile  
PM MAIL WWW ICQ   Вверх
knut
Дата 6.6.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



благодарности всем.

Ну я веть в функц. void CTestView::OnLButtonDown(UINT nFlags, CPoint point) забиваю вектор поинтами
vec.push_back(point)?
Succorso 
Если мне взать 
vector<CPoint>vec;
vector<int>::iterator it;   итератор типа int ,а вектор  у меня CPoint то  будут такие ошыбки 

error C2440: '=' : cannot convert from 'class CPoint *' to 'int *'
error C2446: '!=' : no conversion from 'class CPoint *' to 'int *'
error C2230: '!=' : indirection to different types 
тогда как?
Скинь инф. илеи сылки по контейнерам если не трудно.
 
 


 


--------------------
Цитата

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
PM MAIL   Вверх
MAKCim
Дата 6.6.2006, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата

Ну я веть в функц. void CTestView::OnLButtonDown(UINT nFlags, CPoint point) забиваю вектор поинтами
vec.push_back(point)?

До этой строчки дело не доходит!
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
ZeusAtVingrad
Дата 6.6.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Succorso @ 5.6.2006,  23:09)
А тут 
Цитата(knut @  5.6.2006,  19:50 Найти цитируемый пост)
vec[it].y + 5,vec[it].x - 5,vec[it].y - 5

вообще в качестве индекса ты передаёшь  адрес в памяти. smile  smile  smile 

Не адрес в памяти, а объект std::vector<CPoint>::iterator

Кстати, в общем случае, если в контейнер добавлены или удалены данные - итератор становится недействительным? Или это только при удалении? 
PM MAIL   Вверх
Earnest
Дата 6.6.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(knut @  6.6.2006,  10:58 Найти цитируемый пост)
Ну я веть в функц. void CTestView::OnLButtonDown(UINT nFlags, CPoint point) забиваю вектор поинтами
vec.push_back(point)?

При этом из него же и пытаешься точки брать (а их там нет - какая досада!  smile ).

Цитата(ZeusAtVingrad @  6.6.2006,  11:47 Найти цитируемый пост)
Кстати, в общем случае, если в контейнер добавлены или удалены данные - итератор становится недействительным? Или это только при удалении?  

Смотря какой контейнер. Если вектор, то все итераторы становятся недействительными как при вставке, так и при удалении (Т.е. они могут случайно остаться действительными, но полагаться на это нельзя.) То же верно и  для деки. Списки, наборы, отображения - итераторы всегда остаются действительными кроме итератора на удаленный элемент.
 


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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