【问题标题】:Dynamic sized array of pointers to class指向类的动态大小的指针数组
【发布时间】:2012-03-15 22:04:10
【问题描述】:

这些是数组约束:数组具有自定义大小,我将在程序顶部读取它,这将是指向我自己的类 Tree 的指针数组,数组需要对每个单元格进行恒定的读取时间。

这是我的代码不起作用: scanf("%d %d",&n,&q);
Tree *pointers = new Tree[n];
pointers[0]->value = NULL;

【问题讨论】:

  • C++,它不能编译。编译错误:未定义对 `Tree::Tree() 的引用
  • @PiotrŁużecki:这是链接器错误,而不是编译器错误。如果你不介意我说,如果这些基本的事情让你感到困惑,也许你应该稍后再微调动态数组的随机访问复杂性......

标签: c++ arrays class pointers dynamic


【解决方案1】:

永远不要使用scanf。在 C++ 中,使用动态容器和 iostream:

#include <iostreams>
#include <vector>

int main()
{
  unsigned int n;
  int q;

  if (!(std::cin >> n >> q)) { /* error! */ }

  std::vector<Tree> forest(n);

  // ...
}

根据您的设置,最好先逐行读取,然后处理每一行;搜索这个网站,因为这个问题已经回答了一百次了。

【讨论】:

  • 这次我不能使用向量,因为它可以分配太多我需要的空间。有没有像我的代码这样简单的方法?
  • 好的,这里有一些限制:这个数组需要在内存中很好地分配(不超过它的需要),恒定的时间来添加值(在数组的末尾),恒定的时间来读取任何价值。
  • @PiotrŁużecki:我不明白。 vector 确实具有恒定时间随机访问。它实际上只是一个实际动态数组的包装器。这到底是什么太慢了?没有什么比向量访问方式更好的了。
  • @PiotrŁużecki:访问向量与访问原始数组一样快。你不能让它更快。
  • @PiotrŁużecki vector 确实具有随机访问权限。事实上,vector 可能与动态数组一样快。如果您不想分配太多内存,则只需在开始向其中插入内容之前调用reserve
【解决方案2】:

如果声明了指针,则语法: “*pointer”代表内存位置。 “指针”表示指向内存位置的指针。

因此,Tree *pointers = new Tree[n];new 关键字返回一个指向无法分配的内存位置的指针。

我希望这能解决问题:

    Tree *pointers;

    pointers = new Tree[n];

【讨论】:

    【解决方案3】:

    我猜你问的是C++

    您的代码将不起作用。

    您不能在 C 或 C++ 中动态分配数组,从而在运行时推迟对其大小的定义。
    您必须改用指针:

    Tree *pointers =new Tree[n];
    

    别忘了delete [] pointers

    【讨论】:

    • 这正是我在第一篇文章中写的(没有删除部分,但这里没有问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 2017-11-20
    • 2022-01-02
    • 2014-07-22
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多