C ++将指针插入指针数组

时间:2013-10-12 08:51:06

标签: c++ arrays pointers dynamic

在c ++中需要一些关于动态数组的帮助

我所拥有的是一个动态的指针数组,即

Node* nodes;

和一个向该数组添加新节点的函数。

void insertNode(Node* nodeT){
   nodes = new nodeT;
}

现在我的逻辑可能完全错了,因为我知道执行以下操作会有效,但我想知道是否有更好的方法而不使用STL

Node * nodes = new Node(arg);

感谢您提前提供任何帮助。

3 个答案:

答案 0 :(得分:3)

在下面的nodes中,只表示指向一个Node对象的指针。

Node * nodes = new Node(arg);

要在多个节点上获取数组,必须告诉编译器生成一个数组:

Node * nodes = new Node[size]();

然后你可以插入像这样的新对象

node[0] = ...
node[1] = ...

或者,当您无法提前确定节点数时,可以使用std::vector

答案 1 :(得分:1)

取决于你需要什么指针。您可以使用:

  1. 指针数组
    • 易于重新分配
    • 轻松访问(索引)
  2. 对象数组
    • 与1.几乎相同但是:
    • 需要真正关注对象构造函数/析构函数以避免内存泄漏 和冲突
    • 较慢的重新分配和插入/删除
    • 非常快速的访问
    • 内存中的线性布局(可以加快很多事情)
  3. 链式列表
    • 轻松快捷地添加/插入/删除项目
    • 访问缓慢(必须通过链)
    • 众所周知的事情......随时可以使用源代码进行谷歌搜索
  4. 我个人更喜欢选项2.

    • 有一个模板列表< T类>这跟{T * dat相同; int num,siz; }
    • dat是对象的线性数组
    • num是已使用对象的实际数量
    • siz是实际分配的数组大小
    • 将(T a)添加到end:dat [num] = a; NUM ++;
    • insert(T a)to(int ix):for(i = num; i> ix; i--)dat [i] = dat [i-1]; DAT [IX] = A; NUM ++;
    • delete(int ix):for(i = ix; i< num; i ++)dat [i] = dat [i + 1]; NUM - ;
    • 重新分配:siz<< = 1; T * tmp = new T [siz]; for(i = 0; i
    • 重新分配:siz>> = 1; T * tmp = new T [siz]; for(i = 0; i
    • 别忘了添加范围检查
    • 当num reach siz或siz / 2重新分配siz为double或half size(或者大于num时可以添加滞后)
    • 不要忘记使用删除[] dat; 而不是删除数据; !!!
    • T a;需要实现a(),~a()和a * = a;或a& = a;
    • 当正确实现[]运算符然后也可以用作多维数组
    • 释放列表析构函数
    • 上的内存
    • 添加分配功能以加快列表使用(避免在知道大小时重新定位)

    选项1与选项2非常相似,但代替(T * dat)是(T ** dat)

    • 需要额外新/删除每一项
    • 通过两个指针来解决项目ix = * dat [ix]或dat [ix] [0]
    • 插入/删除/重定位仅复制指针而不是对象(非常快)

    P.S。我知道你们中的大多数人都会使用std(所以请不要判断)但是我使用它已经差不多二十年了,而且还在没有std存在的平台上。众所周知,已知的功能/行为对我的时间和安全关键应用程序来说都是一件好事。

    希望有所帮助

答案 2 :(得分:0)

我建议使用std::vector代替传统数组:

  1. std::vector是安全数组。
  2. 它是STL的成员。
  3. 您可以使用lambda函数和其他函数轻松迭代它。
  4. 您的代码不会有任何垃圾内存。
  5. 等等。
  6. 请访问:

    vector ref