【问题标题】:C++ Iterating over vector of class pointers and using base functionC ++迭代类指针向量并使用基函数
【发布时间】:2021-05-16 19:36:21
【问题描述】:

我试图循环一个指向我的类的指针向量,我们称之为MyClass,并为向量中的每个元素调用MyClass 中的一个方法,我们称之为MyMethod。那就是:

std::vector<MyClass*> ClassOne;
for(auto it: ClassOne){
    ClassOne[it].MyMethod();
}

但这显然行不通。有人可以解释一下如何解决这个问题,还有我的代码实际上在做什么(而不是我认为它应该做什么)。

谢谢!

【问题讨论】:

  • 如果向量有对象而不是指针怎么办?循环会是什么样子?如果您知道该问题的答案,那么这实际上就是您发布的问题的答案。

标签: c++ class pointers vector


【解决方案1】:

当你使用时,

for(auto it: ClassOne)
{
   // ...
}

itMyClass*,而不是 int。因此,您需要将对 MyMethod 的调用更改为

it->MyMethod();

for 循环需要:

for(auto it: ClassOne)
{
   it->MyMethod();
}

【讨论】:

  • Ahhhhh 好的,这很有意义,谢谢。
【解决方案2】:

您正在使用基于范围的 for 循环,因此您应该使用

for(auto it: ClassOne){
    it -> MyMethod();
}

it 不是索引。它是元素(作为指针的向量的元素)本身的副本。它可以是元素本身,使用

for(auto & it: ClassOne){
    it -> MyMethod();
}

相反。但这不是最佳选择。

请注意,不建议使用纯指针。请改用smart ones

【讨论】:

  • 除非it 是一个引用(它不是,除非你这样做for (auto &amp;it : ClassOne)),那么it 是一个指针,它有一个元素的复制值,而不是元素本身.
猜你喜欢
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多