繁体   English   中英

如何创建对象数组?

[英]How do I create an array of objects?

我只知道 Java,我现在正在学习如何做 c++。 我目前有一个名为“节点”的 object。 我想在不同的 class 中制作这些元素的数组,并且我必须对该数组执行许多操作。 因此,我试图声明一个在我的构造函数中初始化的全局数组变量。 在 Java 中,这将由以下人员完成

ObjectName[] variableName = new ObjectName[size];

但我不确定如何在 c++ 中执行此操作。我尝试声明它类似于我声明其他全局 arrays 的方式,

Node* nodes;

然后在我的构造函数中:

nodes = new Node[size]

但是我遇到了一堆编译器错误。 我该怎么做? 这只是我在 c++ 编码的第二周,所以尽量保持基本的答案。

在 C++ 中,您使用vector的频率高于array 您还区分了在堆栈上和堆上创建对象(您已经提到了这个概念;在 C++ 中,您更积极地参与了思考)。

您可能还需要注意您使用的是哪个 C++ 标准。 一些概念在旧标准中不可用。 我试图在下面的示例代码中提及一些。

在 C/C++ 中处理 arrays 时,您应该理解指针的概念,我相信这可能是您混淆的原因。 new在堆上创建一个 object 并返回一个指针。 创建数组时,返回的指针指向第一个元素。

如果可以,请避免使用new 在较新的 C++ 标准中,有更好的智能指针概念(例如std::unique_ptr<...> ); 我不会深入探讨,因为你才刚刚开始。 耐心学习C++,我相信你会成功的,这真的需要时间。

#include <iostream>
#include <array>
#include <vector>

struct Node {
    std::string name = "node";
};


int main() {

    const size_t size = 10;

    // you can create it on the stack
    // will be deleted when leaving the block/scope
    Node nodes1[size];
    nodes1[0].name = "first node1";
    std::cout << nodes1[0].name << std::endl;

    // you can create it on the heap
    // you have to delete the objects yourself then
    Node *nodes2 = new Node[size];
    nodes2[0].name = "first node2";
    std::cout << nodes2[0].name << std::endl;

    // in C++ 11 and later you can use std::array<...>
    // you have to include the header <array> for that
    std::array<Node, size> nodes3;
    nodes3[0].name = "first node3";
    std::cout << nodes3[0].name << std::endl;

    // in C++ you use array "seldom"
    // instead you use the containers quite a lot as far as I have learned
    // e.g. you can include <vector>; can be used like an array
    std::vector<Node> nodes4(size);
    nodes4[0].name = "first node4";
    std::cout << nodes4[0].name << std::endl;

    // you can iterate over a vector like you know it from an array
    for (size_t i = 0; i < nodes4.size(); ++i) {
        if (i == 0) {
            std::cout << nodes4[i].name << std::endl;
        }
    }

    // in C++ you will soon learn about iterators too
    for (auto iter = nodes4.begin(); iter != nodes4.end(); iter++) {
        if (iter == nodes4.begin()) {
            std::cout << iter->name << std::endl;
        }
    }

    return 0;
}

如何创建对象数组?

给定一个名为ObjectName的类型,您可以定义一个名为variableName的数组变量和一个编译时常量大小size ,如下所示:

ObjectName variableName[size]{};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM