プロが教えるわが家の防犯対策術!

C++言語でプログラミングをしています。

大きな(可変サイズの)木構造をメモリ上に作るためにクラスへのポインタを要素に持つ配列

std::vector<T*> vector1;  (Tは定義済みのクラス)を与えて管理しています。

木のコピーを作るときに、

for(i= 0;i < vector1.size();i++)//vector1の内容をvector2へコピー
{
vector2.push_back(new T(*(vector1[i])));
}
//ここで T::T(const T&) コピーコンストラクタが定義済み

for(i= vector1.begin();i!= vector1.end();i++)//vector1の内容を削除
{
delete (*i);
}
vector1.clear();

のような処理を実行したり、

for(i= vector1.begin();i!= vector1.end();i++)//各要素について T のメンバ関数を実行
{
(*i) -> f(x);
}
//ここで T::f( 何らかのパラメータ ) が与えられているとする。

のようにメンバ関数を順次実行する処理をあちこちに書いているのですが、
これをテンプレートなどの形でまとめる方法ってないものでしょうか?

A 回答 (2件)

コンパイラがC++11対応ならどれも for_each と ラムダ式で実装できます。



for_each(v1.begin(), v1.end(), [&](T* x) { v2.push_back(new T(*x));});

など。
    • good
    • 0
この回答へのお礼

ラムダ式の存在を初めてしりました、早速使ってみます。

お礼日時:2012/02/09 06:12

range-based for (これも C++11) でもできそう?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。が、できれば部品化したいのです。

お礼日時:2012/02/10 03:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!