| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > вопрос по итераторам |
| Автор: 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); } почему не пашит? |
| Автор: ZeusAtVingrad 5.6.2006, 20:28 | ||||
Наверное потому что у тебя вектор пустой. Вот это:
вообще что-то несусветное. И встречный вопрос: А как именно не пашет-то? ЗЫ: Что-то тебе с языком делать надо. |
| Автор: MAKCim 5.6.2006, 20:41 | ||||||||
vec.begin()==vec.end() на первой итерации Добавлено @ 20:42
зачем? |
| Автор: Succorso 5.6.2006, 23:09 |
| knut, весь алгоритм с итераторами насмарку: 1) как было сказано выше - у тебя действительно пустой вектор, и ни одной итерации не будет выполнено. 2) в качестве параметра оператору [] нужен интегральный тип "int" (если ты оператор ранее не перегружал), а тут ты передаёшь, в качестве индекса переменную не типа int, а типа CPoint. Конечно же, компиллятор не может сделать преобразование в int. А тут вообще в качестве индекса ты передаёшь адрес в памяти. Советую побольше почитать информации по контейнерам. |
| Автор: knut 6.6.2006, 09:58 |
| благодарности всем. Ну я веть в функц. 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 тогда как? Скинь инф. илеи сылки по контейнерам если не трудно. |
| Автор: MAKCim 6.6.2006, 10:02 | ||
До этой строчки дело не доходит! |
| Автор: ZeusAtVingrad 6.6.2006, 10:47 | ||
Не адрес в памяти, а объект std::vector<CPoint>::iterator Кстати, в общем случае, если в контейнер добавлены или удалены данные - итератор становится недействительным? Или это только при удалении? |