C++ 如何使数组(具有类的数据类型)具有未定义的大小

C++ 如何使数组(具有类的数据类型)具有未定义的大小,c++,C++,我的问题: 我有一个如下所示的文件: INPUT(1) INPUT(2) INPUT(3) INPUT(6) INPUT(7) OUTPUT(22) OUTPUT(23) 10 = NAND(1, 3) 11 = NAND(3, 6) 16 = NAND(2, 11) 19 = NAND(11, 7) 22 = NAND(10, 16) 23 = NAND(16, 19) 现在,我读了这个文件,并试图找到NAND这个词。如果我找到了单词NAND,那么我想推送它的ID,第一个是10 将线排列

我的问题:

我有一个如下所示的文件:

INPUT(1)
INPUT(2)
INPUT(3)
INPUT(6)
INPUT(7)

OUTPUT(22)
OUTPUT(23)

10 = NAND(1, 3)
11 = NAND(3, 6)
16 = NAND(2, 11)
19 = NAND(11, 7)
22 = NAND(10, 16)
23 = NAND(16, 19)
现在,我读了这个文件,并试图找到NAND这个词。如果我找到了单词NAND,那么我想推送它的ID,第一个是10 将线排列成一个数组

问题:要在其中推送NAND ID的阵列应为类节点类型。我该怎么做

PS:我需要数组为节点类型,因为然后我调用另一个方法,该方法在两个节点上进行处理,例如wireNode*a、Node*b

这很简单:

包括向量的标题:

#include <vector>
创建新节点对象后:


另外,如果您真的想自己管理内存,您可以使用Node*的向量。请注意,也可以从向量中获取对象节点的地址,但必须小心不要在向量上的操作之间信任它。

我已将您的非解决方案修改为解决方案:

std::vector<Node> nodes; // dynamic array of type Node
Node my_new_node; // create a Node instance
my_new_node.name = input_name; // set it's name or do whaterver you want with it
nodes.push_back(my_new_node); // add it to the array

数组是一个静态大小的集合

Node myNodes1[ARRAY_SIZE];
Node *myNodes2=(Node *)malloc(sizeof(Node)*ARRAY_SIZE);
这意味着您必须分别在编译时和运行时定义它们的大小,因此它们不太适合您的需求

vector是一个动态大小的集合。通常,这种动态大小的集合的内部将生成一个指针数组,该数组的大小通常可以通过其构造函数指定。填充该数组后,将分配一个大小为该数组两倍的新数组,并将主数组的内容复制到该数组中,然后释放第一个数组

人们建议您使用std::vector,因为它将消除手动调整数组大小的技术性

更新后的问题建议,如果已将值解析为节点的数组或向量,则尝试放置字符串或int。要做到这一点,您需要使用该值构造一个Node实例,然后将其传递给您的集合,如何做到这一点将取决于您的Node objects构造函数。可能的形式

std::vector<Node> nodes;
//for file
    //where node found
        Node t_node(id);
        nodes.push_back(t_node);

@DanielKamilKozar这也意味着她无法阅读基本文档,例如,因此我不确定我们在这里写的任何东西都能帮助她。@user2756695:Re:重要,请解释为什么这不是正确的解决方案。请澄清您对std::vector的哪些不了解,这使您无法使用它。这比简单地避开这样一个强大的类要有效得多,这个类的用例正是您所描述的,即动态大小的数组。我不知道数组的名称-这没有意义。请在描述中更加具体。现在投票关闭。您从文件中读取了一些名称,然后想向数组中添加一个元素。你想补充什么?它来自哪里?什么是节点?是否要通过查找名称在某处查找现有节点?这仍然很混乱。也许我误解了这个问题。。。嗯…@fritzone:是的,我的问题是different@user2756695那么请把它精炼一下。。。似乎没有人能理解:详细说明为什么这个答案不是解决方案。@fritzone:我已经更新了我的问题。再次更新了我的问题。
Node myNodes1[ARRAY_SIZE];
Node *myNodes2=(Node *)malloc(sizeof(Node)*ARRAY_SIZE);
std::vector<Node> nodes;
//for file
    //where node found
        Node t_node(id);
        nodes.push_back(t_node);