首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >增量联合?

增量联合?
EN

Stack Overflow用户
提问于 2010-04-21 19:24:59
回答 7查看 232关注 0票数 2

我试着用一个联盟声明来描述C++中的数独董事会:

代码语言:javascript
运行
复制
union Board
{
    int board[9][9];
    int sec1[3][3];
    int sec2[3][3];
    int sec3[3][3];
    int sec4[3][3];
    int sec5[3][3];
    int sec6[3][3];
    int sec7[3][3];
    int sec8[3][3];
    int sec9[3][3];     
}

电路板的每个部分是否与数组的正确部分相对应?也就是说,

sec4是否与4-6板相对应?有没有更好的方法来做这类事情(特别是描述数独棋盘)?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-04-21 19:39:48

您可以通过将其封装在一个类中来实现您想要的效果:

代码语言:javascript
运行
复制
class Board {
public:
    int& sec1(int r, int c) { return board[r][c]); }
    int& sec2(int r, int c) { return board[r][c+3]; }
    // etc.

private:
    int board[9][9];
};

但是,我不确定这是代表数独棋盘的最好方式。你可能会发现,一旦你开始研究逻辑,你就会得到一个更好的表示。

票数 5
EN

Stack Overflow用户

发布于 2010-04-21 19:26:21

这是行不通的,就像写的那样。

联合的行为就像其所有成员都位于距联合起始位置的偏移量0处一样。

这意味着sec9将与sec1具有相同的偏移量(零),因此会重叠。

我认为使用联合也不可能做到这一点,因为您需要表示在每个部分结束后需要发生特定的“跳过”,以到达该部分中的下一个单元格。您不能使用C或C++数组来做到这一点。

票数 1
EN

Stack Overflow用户

发布于 2010-04-21 19:46:08

答案是否定的,内存布局将不会是您所期望的。请注意,无论何时在C/C++中定义数组,内存都是连续的,因此对于9x9数组,第四个元素不是第二行的第一个元素,而是第二个3x3块的第一行的第一个元素。

您的联合的内存布局将在full对象的9行中的每一行上都有sec块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2682408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档