|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.04.2017, 07:03 | #1 |
Форумчанин
Регистрация: 09.04.2017
Сообщений: 598
|
Оптимизация.
Здравствуйте!
Я решил пример по книге Р.Лафоре. Часть примера приводится в ходе предоставления материала, а часть - это задание из "Упражнений". Моей задачей было, разделить перемешанную колоду карт между 4 игроками в бридж. А после вывести на экран поделенную колоду. Хотелось бы узнать, можно ли как-либо уменьшить код, оптимизировать, в части именно разделения колоды карт между 4 игроками? Код:
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум. Последний раз редактировалось Alex11223; 24.04.2017 в 08:13. |
24.04.2017, 08:27 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
24.04.2017, 08:56 | #3 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Код:
Вообще использование стандартных контейнеров и алгоритмов предпочтительнее циклов и массивов, т.к. позволяют компилятору четка предсказывать ошибки + 1 легким #define могут превратить "цикл" в параллельный на все процессоры системы. Последний раз редактировалось alexzk; 24.04.2017 в 10:23. |
24.04.2017, 10:21 | #4 |
Форумчанин
Регистрация: 09.04.2017
Сообщений: 598
|
Спасибо Вам большое. Я изучу Ваш код. Однако я до контейнеров еще не дошел. Приступил только к теме преобразование типов и перегрузка операций. ))Мой визуал выдает ошибку на 114 строке. Не могу скриншот прикрепить. Визуал 2008, Ваш наверное новее.
[IMG]file:///C:/Documents%20and%20Settings/Admin/Мои%20документы/Мои%20рисунки/кадр_4.jpg[/IMG] Последний раз редактировалось KAMLS; 24.04.2017 в 10:32. Причина: Не могу прикрепить скриншот |
24.04.2017, 10:27 | #5 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
card ch1[13], ch2[13], ch3[13], ch4[13]; это нада было делать как массив из массивов и обрабатывать так же в цикле. Раз возникла нумерация ch1, ch2 ... то логично, что это массив. В моем примере std::copy это спрятанный цикл.. для ваших массив из массивов были бы вложеные for (i...) { for(j) { } } И второй момент - привыкайте на каждый чих определять тип, как у меня вон using hand_t = std::vector<card>; //вектор карт, это как бы массив переменной длины using players_t = std::array<hand_t, 4>; Тогда не запутаетесь + можно удобно его изменить на другой какой-то, без глобального переделывания кода. ...я там комментов в код подаписал, обновите себе... Последний раз редактировалось alexzk; 24.04.2017 в 10:33. |
|
24.04.2017, 10:42 | #6 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Это какая ? std::copy ошибка?
...у меня вообще g++ alex@moy-super:~/Work/tests$ ./a.out Исходная колода: 2 3 4 5 6 7 8 9 10 J Q K A 2 3 4 5 6 7 8 9 10 J Q K A 2 3 4 5 6 7 8 9 10 J Q K A 2 3 4 5 6 7 8 9 10 J Q K A Перемешанная колода: K 7 7 6 3 9 8 4 4 10 9 10 8 Q 2 J A K K 2 2 9 8 3 5 4 3 A Q Q 10 10 6 J J 2 Q 5 7 K 6 4 3 A 5 9 A 5 J 8 6 7 1й игрок: K 7 7 6 3 9 8 4 4 10 9 10 8 2й игрок: Q 2 J A K K 2 2 9 8 3 5 4 3й игрок: 3 A Q Q 10 10 6 J J 2 Q 5 7 4й игрок: K 6 4 3 A 5 9 A 5 J 8 6 7 Скопируйте текст ошибки.... Последний раз редактировалось alexzk; 24.04.2017 в 10:46. |
24.04.2017, 10:56 | #7 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
это ж холиварный вопрос, многие наоборот считают, что в большинстве случаев так не стоит делать: сложнее читать код, придется постоянно смотреть что это, чтобы понять что с ним можно делать и т.п.
это ж просто алиас, а не тип. Он не запрещает например присвоить одно другому если исходные типы это позволяют. Цитата:
Надо или загрузить вложение на форум http://www.programmersforum.ru/showthread.php?t=238320, или на сторонний хостинг и дать ссылку. Но скриншотить ошибки вообще не надо, можно ж просто скопировать текст ошибки (либо Ctrl+C в окне ошибок, либо в окне Output).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 24.04.2017 в 11:11. |
|
24.04.2017, 11:06 | #8 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
struct some { size_t size() const } ну и все остальные методы, и тудысь впихнуть в typedef, или шаблон какой еще ... и оно скомпилится, как так и нада (если я определю, все использованые "названия"). Вопщем, давайте говорящие имена типам и не парте моск, как по мне Вот на яве 2 одинаковых опр. с разными названиями будут совсем разные типы... а в С++ в том и сила, что потом можно менять и не парится QList<int> на std::vector<int> ...вы вообще пробовали в сотне файлов с макросами сменить some* на std::shared_ptr<some> ? А я пробовал. Мой выбор - алиасить каждый чих) (можно приватно в классе). Последний раз редактировалось alexzk; 24.04.2017 в 11:11. |
|
24.04.2017, 11:14 | #9 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Так я про typedef/using, где там тип?
так у них же разные методы + работают по-разному, COW и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
24.04.2017, 11:19 | #10 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
Про using ...ну да, это алиас как не крути. Но тем он и хорош, что алиас везде дальше пользуется, а "заалиасить" потом че угодно можно, абы интерфейс совпал. Блин, с такими вашими рассужденями, давайте магические числа писать, чо их алиас-константить. Дибилов в мире С/С++ валом. Хорошо, что их SIGSEGV быстро на землю спускает, в отличие от JavaScript. Вон их в Qt набежало. Я у себя в продакшине 5.6 заморозил, дальше нельзя - сплошной баг на дев машине (5.8, 5.9). У меня прога старательно на std построена, кроме интерфейсов, где удобнее кт, собссно ядро без гуя для сервака компилится без кт. Так вот, на 5.6 работало, на 5.8 сплошные сиги...внтури кт, типа вдруг нельзя qml хостеру ставить самого себе property и прочее. ..блин, да я даже КДЕ снес после апдейта на 5.8 стали сплошные ошибки гуя кругом - того нет, то не сработало ...поставил lxqt на виджетах, без qml. Последний раз редактировалось alexzk; 24.04.2017 в 11:27. |
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Оптимизация | htior | Помощь студентам | 0 | 25.01.2013 18:50 |
Оптимизация | Красноглаз | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.09.2011 11:16 |
Оптимизация... | MikeMNN | Общие вопросы C/C++ | 0 | 15.12.2010 17:40 |
Оптимизация | Alex Cones | Общие вопросы Delphi | 9 | 07.07.2010 08:47 |
Оптимизация | Viper1287 | Операционные системы общие вопросы | 7 | 13.09.2009 15:33 |