我正在尝试在函数中创建一个对象,但我遇到的问题是变量名必须在运行时定义。有什么我能用数组做的事情,允许ne动态地在函数中创建一个变量,最好给它一个与上次调用函数时创建的名称不同的名字?

***我在C ++工作

编辑: 我不能提供任何代码,因为我现在没有任何代码。我现在所拥有的只是伪代码。

基本上,我正在尝试创建一个链表,但是我想要使用的addNewItem()方法需要使用相同的方法来创建不同的对象。

编辑: 从技术上讲,我们不会制作链接列表,只是更多的概念证明,以了解它们的工作原理。

编辑:这是代码:

#include "linklist.h"
#include <iostream>
using namespace std;

struct linklist
{
    Student * obj;
    linklist * next;
};

linklist * head;

int main()
{

}
void addStudent(char * newsdnt)
{
    if(!head){
            linklist * a = new linklist;
            a->obj = new Student(newsdnt);
            a->next = 0;
            head = a;
            return;
    }else{
            linklist * a = new linklist;
            a->obj = new Student(newsdnt);
            a->next = 0;
            if(!head->next){
                    head->next = a;  // Can only have one or two items in list
            }
    }

}

有帮助吗?

解决方案

如果您想要链接列表 - 请调用new以创建每个新节点,然后将其添加到列表中。

像这样的Smth:

void addStudent(char * newsdnt)
{
    linklist* a = new linklist;
    a.obj = new Student(newsdnt);
    a.next = 0;

    if( head == 0 ) {
        head = a;
    } else {
        linklist* whereToAdd = head;
        while( whereToAdd.next != 0 ) {
            whereToAdd = whereToAdd.next;
        }
        whereToAdd.next = a;
    }
}

其他提示

构建(单独)链接列表的最简单方法是在前面添加新项目:

linklist *head = 0;

...
a->next = head;
head = a;
...

如果在O(N)时间内在尾部添加项目是可以接受的,那么每次都扫描列表以找到结束。

linklist head;

...
a->next = 0;
item = &head;
while (item->next != 0)
    item = item->next;
item->next = a;
...

如果你必须在O(1)时间内在列表的尾部添加新项目,那么保持一个循环列表和指向列表尾部的指针(以便 tail-&gt; next 是指向列表头部的指针。 (之前的列表结构可以称为“开放式”。)

linklist  root = { 0, &root };
linklist *tail = &root;

...
a->next = tail;
tail->next = a;
...

注意:迭代整个列表的终止条件(例如,查找列表中的项目)取决于使用的结构(循环与开放式)。

警告:未经测试的代码!

如果您不确定O(1)和O(N)的含义,请阅读“Big O”符号。

我会建议一个载体:

#include <vector>
using namespace std;
void foo()
{
    vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    cout << v[0] + v[1] << endl;
}

假设您需要 N 某些类型 T 的对象:数组在C ++中非常存在。 STL也是如此,它为您提供了许多机会。您需要定义如何访问和使用这些对象 - 这会影响容器的选择。但是,您是否可以发布一些代码,以便我们的答案不那么模糊(对您更有帮助)?

我不确定你想要什么,但听起来你可以使用 Multiset

请提供更多详情,我或许可以提供更多帮助。

对于初学者,我建议你将你的链表结构重命名为节点,并添加一个新的链表结构,它包含头部和(可能)当前/尾部指针。然后,您应该在此类/结构中实现允许您操作它的方法。

目前您缺少的是一个遍历列表的方法(递归获取下一个指针,直到您结束)并返回指向最后一个元素的指针。完成后,可以将该元素的下一个指针设置为新创建的对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top