【问题标题】:Infinite objects无限对象
【发布时间】:2014-07-01 02:29:12
【问题描述】:

我有一个程序,它有一个名为 convict 的对象数组,由 Inmate 类组成。 代码如下所示:

int intakeAmount;
cout << "How many inmates came in today";
cin >> intakeAmount;
Inmate convict[intakeAmount];

如您所见,用户必须准确输入进入系统的囚犯数量。它稍后要求用户输入每个创建的罪犯的信息。这很好用,但如果用户不知道当天有多少罪犯进入系统怎么办?当用户需要创建一个新的罪犯并且仍然能够访问每个罪犯的属性(即姓名、性别、年龄、身高和体重)时,我怎样才能做到这一点?我已经设置了我的类,并设置了 getter 和 setter。这是我个人的知识,与任何家庭作业或测试无关。

其他示例: Minecraft - 我知道这是 java,我承认我从未玩过它,但我知道世界是无限的,用户可以创建无限数量的对象。

我玩过的另一个老派例子是: 过山车大亨 - 您可以创建任意数量的园丁和机械师。

【问题讨论】:

  • 这实际上不是有效的 C++,因为在编译时需要知道数组大小。你想要std::vector
  • 听起来你至少需要一个菜单​​驱动的 cmd 应用程序,它可以循环回到 1) Add convict 2) Access convict etc. 的选择或使用 GUI。然后,您只需根据用户所需的属性访问元素,即;姓名、号码等。至于不知道金额,您可以使用listvector 或其他类似结构。
  • 你熟悉链表的概念吗?这是一个很好的练习,每个程序员都应该学习。
  • 数组可以用作隐式链表,其中每个项目在内存中都是相邻的,而不是追逐指针。扫描速度更快,如果您没有对它们进行排序并且只是在最后推回,那么添加至少与链表一样快。

标签: c++ object


【解决方案1】:

答案是动态分配数组,因为建议 std::vector 会在需要时自动调整大小。

#include <vector>
using std::vector;

vector<bool> numbers( N);

如果您避免 new 和 delete,但声明一个向量,您会发现它的 sizeof 不包含实际向量。因此,它不会在堆栈上分配大量内存,并且会在超出范围时自动释放内存,使用 RAII 避免内存泄漏比使用 new/delete 分配自己的微妙之处更可靠。

C++ Information pages for std::vector

Resource Acquisition Is Initialization

【讨论】:

  • 对不起,建议编辑的“用户”登录,我的帖子被意外推送了,我正在添加它,所以在我合并或接受之前你的正确建议被拒绝了
  • 大局(以及这是一个很好的答案的原因)是您应该寻找旨在轻松完成您需要的事情的数据结构实现,而不是试图弄清楚如何为任务使用难以使用的实现(在本例中为数组)。
  • 谢谢。顺便说一句,我不得不在 java 中的数据崩溃期间退出。刚开始回编程。也感谢您的链接。
  • 从 Java 开始,RAII 思想是至关重要的阅读;否则,当简单地将类对象声明为变量时,您最终会做新/删除簿记(很糟糕)并抱怨缺少垃圾收集,从而允许它们的 con/de-structor 对在它们进入和超出范围时完成工作。
【解决方案2】:

基本上你想为新犯人添加一个新的列向量。 C++ 会让你很难尝试从终端输入数组。

我发现以下答案允许您从终端修改数组。 1:[How to feed array elements from user (i.e., the console) and how to pass array elements to a function as arguments

然后它会输出您为每个向量输入的每个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2012-03-16
    • 2015-09-12
    相关资源
    最近更新 更多