我是一位專家級的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++,以便在真正的項目中實際使用它。閃電般的快速回答我無法感謝你。 –