在C 中重新安排对象
Rearranging objects in array in C++
我正在为卡游戏制作卡片调整功能。我创建了一系列卡对象。然后,我尝试使用Random_shuffle重新排列数组中的对象。但这无效。
char faces[13] = { '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A' };
char suits[4] = { char(3), char(4), char(5), char(6) };
int values[13] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11 };
Card** deck = new Card*[52];
for (int row = 0; row <= 3; row++)
{
for (int column = 0; column <= 12; column++)
{
deck[Card::getCounter()] = new Card(suits[row], faces[column], values[column], true);
}
}
int size = sizeof(deck) / sizeof(deck[0]);
random_shuffle(*deck, *deck + size);
我的意思是,如果我与Cout进行检查,例如
cout << deck[0]->getFace()<< deck[0]->getSuit() << endl;
它显示2(心),就像使用random_shuffle
您的代码问题是操作员大小返回指针的大小(在64位机器上8),而不是指向其指向的数组的大小。结果,表达式
sizeof(deck) / sizeof(deck[0])
返回1,您只会洗个单个值,这意味着您不会随机散布。解决方案可以是:
- 使用数组的显式大小Random_shuffle( *甲板, *甲板 52);
更好,定义
const int num_of_card_in_deck = 52
并在需要的任何地方使用
- 最好还是使用std :: vector
相关文章:
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 是什么让放置新调用对象的构造函数?
- 放置派生C++的新基子对象
- 重用对象与创建新对象
- C++,创建新对象时类的对象更改
- 使用矢量中的现有对象,如果C++中不存在,则创建新的对象
- 如何删除分配了新的对象
- C 将HEAP对象插入std ::用insert()插入映射,而另一个则存在删除新的对象
- 使用新的对象
- 在C 中重新安排对象
- 使用C++0x std::thread调用新ed对象中的成员函数
- 新的新类对象的函数;错误:非静态成员引用必须相对于特定对象
- C++ 没有新返回对象的算术运算符
- 如何在每次迭代中创建一个新变量/对象的循环
- 如何在Cython中返回新的c++对象
- 如何在不'new'的情况下将新的对象实例添加到 std::list
- 使用“放置新”转移对象所有权
- 将两个复杂的属性重新组合成新的对象