Вопрос-Ответ (C++)
|
|
Kornival | Дата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1 |
The Witcher
Сейчас нет на сайте
| Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.
Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
|
|
| |
Нохчи | Дата: Понедельник, 09 Апреля 2012, 01:33 | Сообщение # 241 |
заслуженный участник
Сейчас нет на сайте
| Я твой код практически скопипастил, но у меня работает)
Quote (Aikidos) for (std::map < int, int >::iterator It = myMap.begin(); It != myMap.end(); ++ It) Попробуй поменять на Code for (std::map < int, int >::iterator It = myMap.begin(); It != myMap.end(); It++) Могу проверить на gcc, если хочешь.
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 01:38 | Сообщение # 242 |
постоянный участник
Сейчас нет на сайте
| Quote (Нохчи) Попробуй поменять на Менял. Результат один и тот же.
Quote (Нохчи) Могу проверить на gcc, если хочешь. Проверь.
Странно вообще. Глюк студии/стандарта? Тупость какая-то.
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Нохчи | Дата: Понедельник, 09 Апреля 2012, 01:49 | Сообщение # 243 |
заслуженный участник
Сейчас нет на сайте
| Проверил. Работает правильно. Почему работает на 2008 и не работает на 2010 непонятно, реализация-то все-равно лежит в msvcrt?Добавлено (09.04.2012, 01:49) ---------------------------------------------
Quote (Нохчи) реализация-то все-равно лежит в msvcrt? Хотя нет, там С функции. Похоже это студия
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Йакуд | Дата: Понедельник, 09 Апреля 2012, 01:58 | Сообщение # 244 |
участник
Сейчас нет на сайте
| Aikidos, что именно у тебя не работает? Вроде бы все логично и в 10 работает.
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
Сообщение отредактировал Йакуд - Понедельник, 09 Апреля 2012, 01:59 |
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 02:00 | Сообщение # 245 |
постоянный участник
Сейчас нет на сайте
| Quote (Йакуд) Aikidos, что именно у тебя не работает? Клик.
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Нохчи | Дата: Понедельник, 09 Апреля 2012, 02:09 | Сообщение # 246 |
заслуженный участник
Сейчас нет на сайте
| Йакуд, скомпилируй это и посмотри получится ли вечный цикл Code #include <map>
int main() { std::map < int, int > myMap; for (int i = 0; i < 10; i ++) { myMap[i] = i; }
std::map < int, int >::iterator beg = myMap.begin(); for (std::map < int, int >::iterator It = myMap.begin(); It != myMap.end(); ++ It) { if (It->first == 5) { It = myMap.begin(); if(beg == It) break; } } }
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Понедельник, 09 Апреля 2012, 02:09 |
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 02:16 | Сообщение # 247 |
постоянный участник
Сейчас нет на сайте
| Quote (Нохчи) Йакуд, скомпилируй это и посмотри получится ли вечный цикл Нет. Вечный цикл не получился.
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
Сообщение отредактировал Aikidos - Понедельник, 09 Апреля 2012, 02:16 |
|
| |
Нохчи | Дата: Понедельник, 09 Апреля 2012, 02:18 | Сообщение # 248 |
заслуженный участник
Сейчас нет на сайте
| Quote (Aikidos) Нет. Вечный цикл не получился. Значит It = myMap.begin() вернуло итератор на первый элемент, не?
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
Йакуд | Дата: Понедельник, 09 Апреля 2012, 02:26 | Сообщение # 249 |
участник
Сейчас нет на сайте
| Нохчи, это явно не то.. В момент It = myMap.begin(), It дейстьвительно становится итератором на первый элемент. но после того как пройдет ещё один оборот цикла, увеличивается этот итератор сразу... В этом вся ошибка.. Ща попробую кое-что сделать..
Добавлено (09.04.2012, 02:26) --------------------------------------------- Вот, если сделать так, то все прекрасно работает..
Code for(std::map <int, int>::iterator It = myMap.begin(); It != myMap.end();) { if(It->first == 5) { It = myMap.begin(); } else It++; }
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
Сообщение отредактировал Йакуд - Понедельник, 09 Апреля 2012, 02:30 |
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 02:33 | Сообщение # 250 |
постоянный участник
Сейчас нет на сайте
| Quote (Йакуд) Вот, если сделать так, то все прекрасно работает.. Хитро. Спасибо за помощь.
Хотя всё равно интересно что они там сделали, что такая вещь имеет место быть.
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Йакуд | Дата: Понедельник, 09 Апреля 2012, 02:39 | Сообщение # 251 |
участник
Сейчас нет на сайте
| Aikidos, Нет, дело не в библиотеке, а в понимании что реально творится у тебя в коде. Давай разберем по полочкам все.. Вместо возьмем число 3, для краткости.. 1) It = (0, 0). It->first == 3? No. Начало -> увеличить +1 2) It = (1, 1). It->first == 3? No. Начало -> увеличить +1 3) It = (2, 2). It->first == 3? No. Начало -> увеличить +1 4) It = (3, 3). It->first == 3? Yes. It = (0, 0) Начало -> увеличить +1 5) Вот на этом месте, ты хочешь чтобы у тебя возникло (0, 0). Но в следующий момент, когда ты обновил итератор, у тебя же счетчик увеличился! Тем кодом что привел я, мы предотвратили момент увеличения итератора в момент перехода на начало.
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 02:42 | Сообщение # 252 |
постоянный участник
Сейчас нет на сайте
| Quote (Йакуд) Aikidos, Нет, дело не в библиотеке, а в понимании что реально творится у тебя в коде. Я знаю это, но, как ты успел заметить, что в студии 2008 всё работает нормально.
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Йакуд | Дата: Понедельник, 09 Апреля 2012, 02:46 | Сообщение # 253 |
участник
Сейчас нет на сайте
| Aikidos, Ты уверен? Сам проверял? тут даже по логике должно работать в 10 и 08 100% одинаково. Библиотека тут совершенно не при чем. Может быть, господин Нохчи не понял сразу всей проблемы и просто запустил код, посмотрел что все работает без ошибок и выключил.. Не исключаем этот вариант.
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
Нохчи | Дата: Понедельник, 09 Апреля 2012, 02:47 | Сообщение # 254 |
заслуженный участник
Сейчас нет на сайте
| Quote (Aikidos) Я знаю это, но, как ты успел заметить, что в студии 2008 всё работает нормально Нет. Похоже мы друг - друга не поняли просто. Я пошагово трассировал код, а ты поставил бряк в цикл и жал F5. Quote (Aikidos) После того, как он доходит до 5 и возвращает назад, то в следующий раз начинает не с первого элемента в массиве, а со второго Я думал у тебя myMap.begin() возвращает итератор установленный на второй элемент. Йакуд - молоток.
Многие вопросы по Windows отпадут, если посмотреть тут
Сообщение отредактировал Нохчи - Понедельник, 09 Апреля 2012, 02:49 |
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 02:50 | Сообщение # 255 |
постоянный участник
Сейчас нет на сайте
| Тогда всё понятно. Всем спасибо за разъяснение и помощь Вопрос закрыт
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Йакуд | Дата: Понедельник, 09 Апреля 2012, 02:50 | Сообщение # 256 |
участник
Сейчас нет на сайте
| Aikidos, Вот в онлайн компиляторе скомпилировал. Вместо брейкпоинта, выводил текст. Все точно так же работает как я и говорил и никакая библиотека не виновата.
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
Сообщение отредактировал Йакуд - Понедельник, 09 Апреля 2012, 02:51 |
|
| |
Aikidos | Дата: Понедельник, 09 Апреля 2012, 03:12 | Сообщение # 257 |
постоянный участник
Сейчас нет на сайте
| Quote (Йакуд) Все точно так же работает как я и говорил и никакая библиотека не виновата. Quote (Aikidos) Тогда всё понятно.
Это был последний пазл и мозайка стала выглядеть как нужно. Ещё раз всем спасибо.
Ты вышел в поле. Ты куришь гашиш. Ты видишь машину. Ты медведь. Ты горишь.
|
|
| |
Gavolot | Дата: Понедельник, 09 Апреля 2012, 03:45 | Сообщение # 258 |
Последователь Тени
Сейчас нет на сайте
| Оказалось, что я даже толком не понял как вообще использовать функции доса для прерывания))) Это для меня пока темный лес, в который я не за что сейчас не пойду. Есть способы по проще избавления от моргания в моей супер игре на С++? Графика символьная. Просто гугл молчит на подобные запросы) Где только не пробовал лазить на подобную тему.
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |
Йакуд | Дата: Понедельник, 09 Апреля 2012, 04:07 | Сообщение # 259 |
участник
Сейчас нет на сайте
| Gavolot, я так понимаю, ты обновляешь каждую итерацию целиком весь экран?? Этого делать не стоит! Обновляй только те области в которых произошли изменения. да, это может показаться трудным, но легких путей тут не много.. Ещё я видел специальные библиотеки для "рогаликов" на c++. Там были интересные функции. Как раз именно то, что тебе нужно! Покопай в ту сторону..
"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso .blanco 2.0
|
|
| |
Gavolot | Дата: Понедельник, 09 Апреля 2012, 04:20 | Сообщение # 260 |
Последователь Тени
Сейчас нет на сайте
| Йакуд, Я то думал я самый умный, даже и не думал, что библиотеки для создания рогаликов существуют))) Спасибо +. Добавлено (09.04.2012, 04:20) --------------------------------------------- Я конечно все понимаю, но для меня это действительно открытие))) Буду потом разбираться в этих библиотеках, ведь без них на базовых знаниях я не вытяну что-то подобное.
В общем что-то делаю, но пока не пойму ни как :) Тень - выражение основной сущности человека.
|
|
| |