【发布时间】:2013-06-17 10:06:08
【问题描述】:
我有一个类/结构如下:
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 中引入的 lambda 函数(可以不使用它们,但这需要定义一个单独的辅助函数)。
那么对于奖励积分,有什么方法可以在 C++03 中以紧凑的方式做到这一点?
【问题讨论】:
标签: c++ stl initialization