私は、知識をC++に移植しようとしている、熟練したレベルのJavaプログラマです。これは宿題ではなく、私が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++を十分に把握し始めているように感じます。私は雷の速い答えのために十分にあなたに感謝できません。 –