私は次のようなクラス/構造を持っています:
struct MyStruct {
std::string member_one;
std::string member_two;
};
メンバーをカスタム値に設定して、MyStruct
あるstd::vector<MyStruct>
長さののベクトルを作成します。N
std::vector<MyStruct> my_struct_vect(10);
// initialize class instances
memberOne
ここで、最初のメンバーを新しいベクターに抽出したいと思います。私は次のように行うことができます:
std::vector<std::string> member_one_vect(my_struct_vect.size());
for (size_t i = 0; i < my_struct_vect.size(); ++i) {
member_one_vect[i] = my_struct_vect[i].member_one;
}
私の質問は、カスタム ループを毎回記述することなく、これを行うためのより迅速でエレガントでクリーンな方法はありますか? たとえば Python では、内包表記を使用してこれを非常に簡単に行うことができます。私は C++ で同様のことを期待していませんが、それでもこれを単純化する方法があるかどうか疑問に思っています。
アップデート
std::transform
との使用に関する素晴らしい回答に感謝しboost::adaptors::transformed
ます。これらは非常に便利ですが、コンパクトにするために、C++11 で導入されたラムダ関数に依存していることに注意してください (ラムダ関数なしで使用することは可能ですが、これには別のヘルパー関数を定義する必要があります)。
おまけとして、これを C++03 でコンパクトに行う方法はありますか?