STLを使った動的配列の引数つきコンストラクタの初期化はどうすれば良いのでしょうか?
#include <iostream>
#include <vector>
#include <new>
using namespace std;
class A{
public:
int a;
A(){
cout<<"デフォ"<<endl;
}
A(int num):a(num){
cout<<"引数"<<a<<endl;
}
};
class B{
public:
vector<A> array;
B():array(3){ //暗黙の内にデフォルトコンストラクタでA[0]~A[2]が作成される
vector<A>::iterator it=array.begin(); //placementnewによる配列の置き換えのためのポインタを取得する為のイテレータ
for(int i=0;i<3;i++)
new(&*it+i) A(10+i);
}
};
//省略
class B{
public:
vector<A> array;
B(){
array.reserve(3);
for(int i=0;i<3;i++)
array.push_back(10+i);
}
};
vectorの文法を調べてみてもそれらしいものが見当たらなかったので
(第二引数まで指定するのは複製なので結局は上か下の処理になってしまいます)
別の書き方はないのでしょうか?