通过另一个类中包含的向量进行迭代

时间:2016-05-18 12:47:22

标签: c++ class vector iteration

计划说明

我有三个班级:A,B和C.

出于这个问题的目的,B类只包含一个ID变量,一个状态变量,以及那些的setter和getter。

A类包含B对象的向量,以及使用单位ID存储,删除,修改或比较单位的功能。

C类包含与黑匣子交谈的功能,此黑匣子包含与A类相同的B向量,但具有更新的状态。

具有基本信息的类的粗略示例显示在本文末尾。

问题

在我的主窗口中,我想迭代在A类中找到的向量。对于我希望获取ID的所有元素,将其传递给C类,并使C类返回更新状态。我已经绘制了粗略sequence diagram来说明我的意思。

我的问题是如何正确迭代A类中的向量,以获取随后发送到C类的ID。

我此时考虑的是类似于以下内容(注意:出于此问题的目的,A类中的向量会自动填充):

int main() {
  ...
  ...
  for(int i = 0; i < A.getVectorSize(); i++) {
    char ID = A.getID( i );
    bool state = C.getState( ID );
    A.updateState(ID, state);
  }
}

这并不是很精彩,这就是我要求就如何执行此任务提出建议的原因。我已经制定了一个粗略的"Overview" image系统。对我的图纸不清晰表示歉意。

class A {
  public:
    void updateStatus(char ID, bool status);
    ...
    ...
  private:
    vector<B> b_Storage;
}

class B {
  public:
    getters & setters
  private:
    char ID;
    bool state;
}

class C {
  public:
    bool getState(char ID);
    ...
  private:
    ...
}

2 个答案:

答案 0 :(得分:2)

您可以选择不在main进行迭代,而是将迭代移至A

class A
{
public:
     void updateStates(std::function<bool(char)> f)
     {
          for (const auto& b: b_Storage)
          {
              updateStatus(b.id, f(b.id));
          }
     }
};

// ...

int main() {
    // ...
    A a;
    C c;
    a.updateStates([&](char id) { return C.getState(id); });
}

这使main更加独立于A的实施。

答案 1 :(得分:0)

如果您的问题是迭代b_Storage的私有元素,您可以通过在A类中添加两个公共方法来尝试使用迭代器:

\((\d+)

并使用这些迭代器访问INSERT INTO `wp_make`(`id`, `name`, `slug`) VALUES (0,"audi","audi"); INSERT INTO `wp_make`(`id`, `name`, `slug`) VALUES (1,"BMW","bmw"); INSERT INTO `wp_make`(`id`, `name`, `slug`) VALUES (2,"Mercedes","mercedes"); 的元素。