![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
Scorp_Freeman |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
vector<Nabor> mas;
Вектор состоит из структур типа: Код // Структура, описывающая одну комбинацию struct Nabor{ char codes[32]; bool flag; bool operator <(const Nabor &b)const { return count(codes)<count(b.codes);} //~Nabor(){delete [] codes;} }; Некоторые фрагменты не показываю, а то многовато будет)). Заполняю вектор вроде правильно, потому как я в конце программы его вывожу и все нормально.... Но вот в этом фрагменте он почему то не работает(. При пошаговом выполнении итератор "к" ничему не равен (выделенное выражение) и дальше все(((, а еще почему то не могу при пошаговой отладке посмотреть значения вектора, это нормально?. Этот фрагмент находится в главной функции майн. Moment - это моя функция которая возращает целое. Код vector<Nabor>::iterator k,j;[code] Код int level=count(k->codes); cout<<k->codes; while (k!= mas.end()){ j=k+1; // cout<<j->codes; while ((j!=mas.end())&&(count(j->codes)<=(level+1))){ if (count(j->codes)==(level+1)){ int t=Moment(k->codes, j->codes); if (t==1) cout<<endl<<t<<endl; cout<<'btyu'; } j=j+1; } k=k+1; } Сообщение отредактировано: Scorp_Freeman - 20.11.2007 20:51 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Некоторые фрагменты не показываю, а то многовато будет)) А придется, если нужна помощь, а не сеанс гадания на кофейной гуще... Присоединил бы в RAR-е...Цитата почему то не могу при пошаговой отладке посмотреть значения вектора, это нормально?. Нормально... vector - это не простой массив, а сложный объект, поэтому до хранимых в нем данных не так просто добраться... |
Scorp_Freeman |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Вот текст программы я прилепил).
Проблема в функции Kley. При пошаговом выполнении программы некоторые переменные (level, k, j) не верные значения (( Программа берет данные для вектора из текстового файла ""C:\\Data.txt", а вот его содержание: Y=(199999,7,5,6,8,32,6,5,255); Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ты меня, конечно, извини, но моего владения телепатией явно недостаточно, чтобы постичь глубокий смысл этой программы...
Что касается собственно программы - ничего подозрительного у меня она не выдает, все значения level и codes - совпадают с ранее внесенными в vector значениями. Программа отрабатывает (MSVS не пользуюсь, у меня GCC), но поскольку я не знаю, что она должна выдать - то и не буду говорить, правильно или нет. Хотя функцию Kley я бы переписал вот так: void Kley(vector<Nabor> &Nabor1, vector<Nabor>){ |
Scorp_Freeman |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Цитата Ты меня, конечно, извини, но моего владения телепатией явно недостаточно, чтобы постичь глубокий смысл этой программы... ![]() Цитата Что касается собственно программы - ничего подозрительного у меня она не выдает, все значения level и codes - совпадают с ранее внесенными в vector значениями. А у меня строки которые я отметил никогда не выводятся на экран...... void Kley(vector<Nabor> &Nabor1, vector<Nabor>){ |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
![]() cout << k->codes;тоже не печатается? "Что-то неладно в Датском королевстве" (С) А что для *k отладчик показывает перед выполнением этой строки? Желательно развернуть все дерево для *k, и сделать скриншот. А вообще - напиши маленькую тестовую программу: используй vector<int>, и на нем проверь работоспособность итератора. Что-то слишком странное происходит... |
Scorp_Freeman |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
![]() ![]() Вот просто мне не нравится что при пошаговой не можно просмотреть значения параметров (((( Добавлено через 4 мин. А вот скрины: Сообщение отредактировано: Scorp_Freeman - 22.11.2007 10:31 Эскизы прикрепленных изображений ![]() ![]() ![]() |
Scorp_Freeman |
![]()
Сообщение
#8
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
По ходу дела возник еще 1 вопросик
![]() Код vector<vector<int>>::iterator u; u = bufs.begin(); while (u != bufs.end()){ vector<vector<int>>::iterator t; t = u; t++; while (t != bufs.end()){ if (((*u).size() > (*t).size())&& search((*u).begin(), (*u).end(), (*t).begin(), (*t).end()) != (*u).end()) bufs.erase(u); if (((*t).size() > (*u).size())&& search((*t).begin(), (*t).end(), (*u).begin(), (*u).end()) != (*t).end()) bufs.erase(t); /*if ( ((*u).size() == (*t).size()) && equal((*u).begin(), (*u).end(), (*t).begin()) ); bufs.erase(t);*/ t++; } u++; } Но в процессе выполнения выдает иногда фатальную ошибку : Microsoft Visual Studio C Runtime Library has detected a fatal error in Version_1_33.exe. Press Break to debug the program or Continue to terminate the program. Как можно удалять элементы вектора в цикле ? ) |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Сделай тестовую программу, которая заполняет твой список списков и ищет в нем то, что нужно, но при этом вылетает, а то выдумывать, как ты реализовал заполнение, и что именно там может быть неправильно в твоей реализации - не очень хочется...
Сообщение отредактировано: volvo - 6.04.2008 11:57 |
Scorp_Freeman |
![]()
Сообщение
#10
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 68 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
А интересно, вот если в цыкле
vector<int> mas; ... vector<int>::iterator i; i = mas.begin(); while( i!= mas.end() ){ if <условие> mas.erase(i); i ++; } Если выполнится условие и элемент i будет удален из вектора, на что будет ссілаться итератор i ? На предыдущий элемент? |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
С чего бы?
Цитата(C++ Standard) 23.2.4.3 vector modifiers [lib.vector.modifiers] После erase итератор станет невалидным...<...> iterator erase(iterator position); iterator erase(iterator first, iterator last); 3 Effects: Invalidates all the iterators and references after the point of the erase. |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 23:54 |