C++中的动态数组(指针数组还是新数组?

Dynamic Arrays in C++ (Array of pointers or new array?)

本文关键字:数组 新数组 指针 动态 C++      更新时间:2023-10-16

如果我想创建一个对象的动态数组:

我可以使用 new 关键字创建一个数组,其中C++将自动创建一个节点对象数组并调用所有节点的默认构造函数。

node* nodes = new node[10];

或者我可以创建一个指向节点的指针数组并单独实例化节点。

node* nodes[10];
for (int i = 0; i < 10; i++)
{
    nodes[i] = new node();
}

什么时候使用它们都合适?在第一个示例中,将 new 关键字与数组一起使用时,节点是否仍会动态分配?

非常感谢!

在这两个代码片段之间有很大的不同。

在第二种情况下,即使用以下定义时

node* nodes[10];

不能向数组添加新元素。数组具有固定大小。

在第一种情况下,当您对整个数组使用运算符 new 时

node* nodes = new node[10];

数组可以使用任意数量的元素重新分配。

因此,主要标准是是否需要固定大小的数组,底层类是否具有默认构造函数。

它们的创建方式没有区别,除了第一个表达式用于分配内存以包含 node 类型的单个元素这一事实。第二个用于分配类型为 node 的元素块(数组)。创建对象的动态数组会动态分配每个对象,而不管您创建它们的方式如何。两者之间唯一的明显区别是您是否真的需要单独对新创建的节点执行其他操作。

       For **Dynamic Allocation** we can use Vector in C++
     int main()
        {
        vector<int> v1;
        int x;

        for(int j=0;j<=3;j++)
        {
        cin>>x;
        v1.push_back(x);// Here we pushing 4 values to the Vector..
        }
        v1.push_back(12);//Adding one more value to Vector dynamically
for(int i=0;i<v1.size();i++){
cout<<v1[i]<<"";
}
        }