gpt4 book ai didi

c++ - 调用存储在 vector 中的对象的成员函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:45 25 4
gpt4 key购买 nike

这听起来像是一个新手问题。如何调用存储在 vector 中的对象的成员函数?据说,我有这个类:

class A {
public:
void foo() {
std::cout << "Hello World"; }
};

然后我将一些对象存储在一个 vector 中:

std::vector<A*> objects;
A* b;
A* c;
A* d;

objects.push_back(b);
objects.push_back(c);
objects.push_back(d);

现在我想创建一个循环,其中存储在 vector 中的每个对象都会调用它自己的 foo() 函数。我应该怎么做?起初我以为我可以做这样的事情:

objects[2].foo();

但是我好像不能这样做。

最佳答案

std::vector::operator[]返回对 std::vector 中对象的引用。由于您的 objects 存储了一个指向 A 的指针,您应该这样调用它:

objects[2]->foo();

Now I want to create a loop, in which every object stored in the vector would call it's own foo() function. How should I do this

最简单的循环是:

for (int i=0; i<objects.size(); ++i)
{
objects[i]->foo();
}

使用 C++11 for 循环:

for(auto ep : objects)
{
ep->foo();
}

或者for_each(虽然需要写一个小的lambda)

for_each(objects.begin(), objects.end(), [](A* ep){ep->foo(); });

旁注: 实际上,您最好将值存储在 STL 容器中。

std::vector<A> objects;
for(auto e : objects)
{
ep.foo(); // call member function by "."
}

如果你想用STL容器存储指针,最好使用智能指针,例如

#include <memory>
std::vector<std::unique_ptr<A> > objects;

objects.push_back(new A());
objects.push_back(new A());
objects.clear(); // all dynamically allocated pointer elements will be de-allocated automatically

关于c++ - 调用存储在 vector 中的对象的成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17905351/

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