#include <boost/ptr_container/ptr_vector.hpp>
#include <iostream>
using namespace std;
class Derived
{
public:
int i;
Derived() {cout<<"Constructed Derived"<<endl;}
Derived(int ii):i(ii) {cout<<"Constructed Derived"<<i<<endl;}
~Derived() {cout<<"* Destructed Derived"<<i<<endl;}
};
int main()
{
boost::ptr_vector<Derived> pv;
for(int i=0;i<10;++i) pv.push_back(new Derived(i));
boost::ptr_vector<Derived>::iterator it;
for (it=pv.begin(); it<pv.end();/*no iterator increment*/ )
pv.erase(it);
cout<<"Done erasing..."<<endl;
}
2 番目の for ループは反復子をインクリメントしませんが、反復してすべての要素を消去することに注意してください。私の質問は次のとおりです。
- 私の繰り返しのテクニックとイテレータの使用は正しいですか?
- for ループで反復子のインクリメントが必要ない場合、インクリメントはどこで発生しますか?
- イテレータを使用する方が良いですか、それとも通常の整数で十分ですか (つまり、イテレータを使用して付加価値はありますか)? (pv.erase(pv.begin()+5); のように 5 番目の要素を消去することもできます)
- 新しいオブジェクトを ptr_vector の特定の位置 (5 番目の位置としましょう) に直接割り当てる方法はありますか? pv[5]=new Derived(5); のようなものを探しています。それを行う方法はありますか?