187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Колода карт (тусовка и освобождение памяти)29.06.2012, 12:07. Просмотров 2248. Ответов 12
Метки нет Все метки)
(
Собственно столкнулся с двумя вопросами :
1) Каким образом перетусовать колоду карт? Ничем путнее, чем умножить кол-во карт на 8 (N) и менять местами две рандомные карты N-раз не придумал.. 2) Сама колода содержит два поля :
p.s Бонус вопрос : Почему не прокатывает со стандартным std?
0
|
|
29.06.2012, 12:07 | |
Реализовать структуру "Колода карт"; сформировать случайную перетасовку карт для трёх игроков Колода карт Колода карт
|
|
34 / 35 / 6
Регистрация: 03.10.2011
Сообщений: 61
|
||||||
29.06.2012, 14:37 | 2 | |||||
Используй функцию из стандартной библиотеки: random_shuffle
Например: Откопал свой старый проект, вот как я тасую карты:
Переменная будет удалена из памяти при выходе за пределы ее видимости.
1
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
29.06.2012, 18:42 [ТС] | 3 |
Т.е, если у меня есть некоторый экземпляр класса в функции main (допустим, это некоторая "временная" переменная), я использовал её для (допустим) swap'а, а затем хочу удалить её с концами, чтобы больше не было вообще такого идентификатора и я спокойно смог после некоторой команды снова использовать её идентификатор, то я ничего с этим вообще не поделаю, ведь она описана в main?
{За тусовку большое спасибо. Даже и не думал, что такое в stl реализовано, правда мне не понятно, почему rand() у них нормально срабатывает без srand(time(NULL))} p.s Всё ещё интересен ответ на третий вопрос про string Добавлено через 2 часа 38 минут Помогите, пожалуйста? ;( Добавлено через 35 минут Так же хочу узнать, почему может быть такое : _Pack temp = myPack; // temp-указатель _Card* stack; указывает туда же, куда и myPack а при : _Pack temp; temp = myPack; // все нормально. Правильно проработала перегрузка "=". Конструктор выглядит так : _Pack() : _cnt(0), _stack(0) {}, поэтому проблем быть не должно с ним :<
0
|
В астрале
![]() 8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
|
||||||
29.06.2012, 18:59 | 4 | |||||
Не по теме: Тусовка карт - это сильно. С какого достоинства пускают на эту тусу?
2
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|
29.06.2012, 19:03 [ТС] | 6 |
Хоу, не подумал об этом даже > _ <"
Остался последний вопрос. Продублирую на всякий : Так же хочу узнать, почему может быть такое : _Pack temp = myPack; // temp-указатель _Card* stack; указывает туда же, куда и myPack а при : _Pack temp; temp = myPack; // все нормально. Правильно проработала перегрузка "=". Конструктор выглядит так : _Pack() : _cnt(0), _stack(0) {}, поэтому проблем быть не должно с ним :<
0
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
||||||||||||||||
29.06.2012, 19:42 [ТС] | 8 | |||||||||||||||
Но чем ему так помешал конструктор с обнулением?
И разве в данном случае вызывается не связка в порядке : конструктор, присваивание? Добавлено через 15 минут При этом если я просто закомменчиваю свой конструктор, происходит то же самое ;< Добавлено через 15 секунд При этом если я просто закомменчиваю свой конструктор, происходит то же самое ;< Добавлено через 12 минут Так же, даже если у меня имеется такой вариант :
0
|
29.06.2012, 20:18 | 9 |
оператор= принимает объект по значению - вызывается конструктор копии, после - деструктор этой копии, если конструктор копии дефолтный, то будет вызван delete для объекта myPack. Мораль - нужно перегрузить конструктор копии.
1
|
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
|
|||||||||||
29.06.2012, 20:37 [ТС] | 10 | ||||||||||
Отлично, спасибо. Как-то даже и не знал про конструкторы копии -_-"
Но теперь другой вопрос > ![]() Есть ли возможность избежать тупого копипаста кода перегрузки операции = :
Понятное дело, что так оно не пройдет, ибо зациклится при вызове конструктора копии из оператора, но всё же (может быть) есть способ? :<
0
|
30.06.2012, 04:45 | 11 | |||||
лучше описать конструктор копии, а оператор= сделать через него
1
|
В астрале
![]() 8029 / 4786 / 655
Регистрация: 24.06.2010
Сообщений: 10,558
|
|
30.06.2012, 14:10 | 12 |
igorrr37, Да можно и полностью copy_swap организовать, т.е. каноническую форму.
1
|
30.06.2012, 17:13 | 13 | |||||
copy-and-swap вкупе с copy elision дают на выходе unifying assignment operator
1
|
30.06.2012, 17:13 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
Резервирование памяти/освобождение памяти для трехмерного массива Создать класс "Колода карт" Освобождение памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |