gpt4 book ai didi

c++ - vector 迭代器转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:19 26 4
gpt4 key购买 nike

嘿,在 C++ 中,我有一个类型的 vector :

vector<BaseClass*> myVector;

其中,我将派生类的(push_back)指针插入其中。

现在,我想弹出它的元素,所以我这样做:

vector<ADlgcDev*>::iterator iter;

for (iter = myVector.rbegin(); iter != myVector.rend(); iter++)
{
// but before I pop it, I need to shutdown it down
// so I cast this
// but this way, I'm unable to call the function
(DerivedClass*(*iter))->Shutdown();

myVector.pop_back();
}

但正如在我弹出它之前的评论中提到的那样,我需要调用它的 Shutdown() 方法并且转换也无法正常工作。任何决议?还是不可能?

最佳答案

while (!myVector.empty())
{
((DerivedClass*)(myVector.back()))->Shutdown();
myVector.pop_back();
}

注意事项:

  • 你可能应该使用 dynamic_cast而不是硬投。 (如果确定 vector 中只有 DerivedClass 个对象,为什么不是 std::vector<DerivedClass> ?)
  • 你可能根本不需要转换,因为 Shutdown()应该在基类中声明。
  • 在将对象从 vector 中弹出之前,您可能也应该删除这些对象。 (但事实可能并非如此。)
  • 你或许应该使用调用Shutdown() 的智能指针(和 delete ,可能)。

编辑使用std::vector<T>::clear() , as shown by markh44可能比 pop_back() 更好.

关于c++ - vector 迭代器转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1372288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com