【问题标题】:How to output dynamic arrays values form container array in c++?如何在 C++ 中从容器数组中输出动态数组值?
【发布时间】:2012-04-11 10:52:05
【问题描述】:

我会先解释一下我的情况。 我有一个内部有结构的类和这个容器类的数组

class A
{
    struct B
    {
        int I;
        B *next;
    };

    B *objOfB; //Array of structures
    B *lastB;  //Pointer to last objOfB element

public:
    //Method for adding values to objOfB
    void addB(int i)
    {
        B *temp = new B;
        temp->I = i;
        temp->next = NULL;
        if(ing == NULL)
        {
            last = temp;
            objOfB = temp;
        }
        else
        {
            last->next = temp;
            last = temp;
        }
    }
};

对象的数组在某些函数文件中使用

A * objA = A[100];

我不知道如何处理objOfB 的单个值。有一个简单的例子,它将从 objOfB 的开始到结束。

for (B *temp = objOfB; temp != NULL; temp = temp->next) {
  cout << temp->I << endl;
}

我想在函数文件中执行这个循环,但我想不出不会返回所有objOfB 的方法(它用于循环的第一部分B *temp = objOfB;)。 以下是我创建的用于执行此循环的方法:

B listOfBs() { return *objOfB;  }
B toNextB() { return *objOfB->next; }
bool noLastB(){ return objOfB->next != NULL; }

它是如何工作的,它可以在循环中使用:

for (B *temp = listOfBs(); noLastB(); temp = toNextB()) {
  cout << temp->I << endl;
}

但是我知道这 3 种方法都不适合这个循环。所以我需要一些方法来返回值,另一种方法来告诉应该读取下一个值...... 希望不是更清楚我想要实现的目标。

如何使用方法传递结构值的容器类动态数组?

【问题讨论】:

    标签: c++ pointers return singly-linked-list return-by-value


    【解决方案1】:

    据我了解,您有 A 类(表示单链表的包装器)和嵌套在其中的简单 struct B

    struct B
    {
        int I;
        B *next;
    };
    

    并且您希望A 类也提供一个接口,这将提供更简单的方法来遍历此列表。

    起初,这个数据成员很混乱:

    B *objOfB; //Array of structures
    

    因为您将其视为指向第一个元素的指针。好的开始是将它重命名为:B *head; 所以现在B 的每个实例都可以指向next 元素,并且你有指向head 的指针,最后一个元素是next 等于的元素NULL,你不需要B *lastB;

    然后你会意识到你试图提供的方法没有多大意义:

    B listOfBs() { return *head;  }
    B toNextB() { return *head->next; }
    bool noLastB(){ return head->next != NULL; }
    

    这些方法没有理由按值返回,因为struct B 的定义无论如何都必须对调用者可见。为了KISS principle,只需将head 设为A 的公共数据成员,并将A 重命名为更有意义的名称,例如MyList。然后让调用者这样做:

    MyList list;
    ...
    for (B* b = list.head; b != NULL; b = b->next) {
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2019-01-22
      • 2021-01-08
      • 2018-02-27
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多