我是一位专家级的Java程序员,试图将我的知识移植到C++中。这不是家庭作业,只是一个我试图学习C++的概念。C++ - 将对象添加到std :: vector中,在循环中实例化
我想要做的是使用循环“生成”自定义类型的对象列表。这是我如何在Java中做到这一点:
public class TestClass
{
private ArrayList<ExampleClass> _exampleObjects;
private int _numObjects = 10;
public void populateList()
{
_exampleObjects = new ArrayList<ExampleClass>();
for(int i = 0; i < _numObjects; i++)
{
_exampleObjects.add(new ExampleClass());
}
}
public void doStuffWithListItems()
{
for(ExampleClass e : _exampleObjects)
{
e.performAction();
}
}
}
超级简单的东西。创建一个列表,遍历一个任意的循环并向它添加对象。然后,循环访问这些对象并将其用于任何目的。
TestClass.h:
class TestClass
{
public:
// Constructor, copy constructor, destructor definitions
void populateList();
void doStuffWithListItems();
private:
std::vector<ExampleClass> _exampleObjects;
const int _numObjects = 10;
};
TestClass.cpp:
void TestClass::populateList()
{
for(int i = 0; i < _numObjects; i++)
{
ExampleObject obj;
_exampleObjects.push_back(obj);
/* What actually goes here in place of obj? */
}
}
void TestClass::doStuffWithListItems()
{
for(auto it = _exampleObjects.begin(); it != _exampleObjects.end(); it++)
{
/* What do i do with my iterator to access my object? */
}
}
它我的理解是,我在初始化第一个循环我的对象,他们走出去的范围和最终死亡每个循环迭代。是对的吗?如果是这样,我该如何创建一个持久化实例?
我用shared_ptr <>进行了实验,显然能够持久地存储它们,但是在我的生活中却无法解决如何从shared_ptr的迭代器中取消引用。
我觉得这应该是一个非常简单的概念。我似乎无法解决这个问题。我已经阅读了很多关于C++范围和循环的内容。我似乎无法在两者上找到任何东西。
谢谢。这是一个理想的答案。 :D –
@ScottDrew:我添加了一些额外的信息来澄清你在代码之后提出的问题,以防你仍然在想这件事。 –
谢谢,额外的信息确实有帮助。我觉得我现在已经开始充分掌握C++,以便在真正的项目中实际使用它。闪电般的快速回答我无法感谢你。 –