[英]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.