【问题标题】:Variable naming schemes for objects in C++?C ++中对象的变量命名方案?
【发布时间】:2008-10-19 03:30:18
【问题描述】:

我正在实现一个 BFS,它要做的是通过一棵有序树来找到一个谜题的最短解。

我要做的是创建一个 Snapshot 对象,用于保存拼图中每个部分的当前位置。我会将这个 Snapshot 对象添加到队列中并检查它是否是解决方案。但是,我正在动态创建这些快照。那么是否有某种方式可以在将 Snapshot 对象放入队列时自动生成它们的名称?

或者我是否必须记录我做了多少声明,然后硬编码说...

快照快照2; 快照快照3; 快照快照4; 等等。

【问题讨论】:

    标签: c++ oop search breadth-first-search


    【解决方案1】:

    我想您是在问,当您不知道会有多少对象时,如何创建和保留大量对象。

    您需要创建一个对象数组。然后您可以将它们作为快照[1]、快照[2]...快照[i]访问。

    【讨论】:

    • 是的,抱歉,我真的不知道如何正确表达。感谢您的信息
    【解决方案2】:

    有一种方法 - 你使用Preprocessor's Token-Pasting Operator。这允许您根据变量创建名称,因此您可以指定:

    #define S(variable) snapshot#variable
    

    您可以创建名为 snapshot1、snapshot2 等的变量:

    Snapshot S(1)
    Snapshot S(2)
    

    但是,我不确定这是否是您真正想要的,我可能曾经在实践中使用过这种技术,那是用于代码生成器。

    【讨论】:

      【解决方案3】:

      您可以使用标准模板库中的队列,然后创建一个函数来创建快照对象并将其放入队列中。给这个函数一个静态变量,每次调用它都会递增,并写入快照的 id 字段。

      http://www.csci.csusb.edu/dick/samples/stl.html

      http://www.cppreference.com/wiki/stl/queue/start

      【讨论】:

      • 但问题是当我创建快照对象并且只使用某种通用名称时,例如快照快照;我将其添加到队列中。现在因为我将使用一个循环,它会使用相同的名称声明它。它会让我这样做吗?
      • 如果你在循环中声明它,它应该在每次迭代时重新创建。
      【解决方案4】:

      我认为我们需要更多信息。如果您只是将它们从队列中弹出,您为什么要关心它们的名称?队列中的对象通常没有编号,除非您在数组中实现它。

      【讨论】:

        【解决方案5】:

        抱歉,整个队列的事情有点引起不必要的混乱。

        让我们再举一个例子。所以对于这个拼图,拼图中的块数由用户指定。我设计程序的方式是拼图的每一块都是它自己的对象。

        所以当我开始创建这些片段时,我可以使用某种变量命名方案来命名这些片段吗?所以像这样的东西只是一个例子......

        for (int i-0; i < constraint; i++)
        Piece "Piece"+i = new Piece();
        

        【讨论】:

          【解决方案6】:

          你不能在 C++ 中动态创建变量名,至少在没有一些(想象的?)附加组件的情况下不能。

          编辑:顺便说一句,我在 AI 课上做了一个我认为与你相似的作业,其中我们涵盖了 BFS、DFS 和 A* 等基础知识。没有必要为“快照”设置唯一命名的对象,我使用了队列。

          edit2:如果您需要跟踪您拥有的快照数量,请创建一个计数变量,该变量在您每次创建对象时递增。

          【讨论】:

          • 是的,我想多了,你的权利没必要
          猜你喜欢
          • 2012-05-15
          • 1970-01-01
          • 2022-01-20
          • 1970-01-01
          • 2011-10-10
          • 1970-01-01
          • 2013-11-26
          • 1970-01-01
          • 2012-08-26
          相关资源
          最近更新 更多