在c++中调用父方法的多个向量迭代器

问题描述 投票:0回答:1

我有一个家长班:

class Parent{
    virtual void method1() = 0;                                   
    virtual void method2() = 0;  
    virtual void method3() = 0;  
};                                            

还有两个孩子(但需要赚更多):

class Child1: public Parent{
    void method1() override;
    void method2() override;
    void method3() override;
};


class Child2: public Parent{
    void method1() override;
    void method2() override;
    void method3() override;
};

在我的

Controller
班级中,每个班级都有一个
std::vector

Class Controller{
private:
   std::vector<Child1*> childs1;
   std::vector<Child2*> childs2;
}

我希望能够迭代所有子向量的所有元素来调用重写方法,而不必为每个人创建 for 循环。

类似:

std::vector<std::vector<Parent*>> all_vectors = 
   { 
   std::vector<Child1*>(childs1.begin(), childs1.end()), 
   std::vector<Child2*>(childs2.begin(), childs2.end())
   }

for(vector<Parent*> v: all_vectors) {
    for(Parent* i: v){
       i->method1();
       i->method2();
       i->method3();
    }
}

这实际上不起作用,因为它破坏了每个向量的大小。例如,对于

childs1.size() = 4
,它正确迭代前 4 个元素,但尝试访问第五个元素。如果询问
allvectors[0].size()
allvectors[1].size()
,它会给出比原始尺寸大得多的尺寸。

还有一个问题,这会创建一堆不需要的副本。

有没有办法创建一个自定义迭代器来遍历

n
向量的所有元素?它的
iterator++
操作以某种方式从
vector<Child1>.end()
跳转到
vector<Child2>.begin()

或者还有我在这里没有看到的更好的解决方案吗?

c++ inheritance vector iterator overriding
1个回答
0
投票

我建议简单地使用一个

std::vector<Parent*>
来保存所有
ChildX*
指针,例如:

std::vector<Parent*> all_childs;

all_childs.insert(all_childs.end(), childs1.begin(), childs1.end());
all_childs.insert(all_childs.end(), childs2.begin(), childs2.end());
...

for(Parent* p: all_childs) {
    p->method1();
    p->method2();
    p->method3();
}
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.