从对象的向量中获取成员的向量
Getting vectors of members from vectors of objects
我有以下设置
class obj {
public:
int a();
int b();
int c();
int d();
};
std::vector<obj> obj_vector;
//Fill obj_vector
我想访问这些方法(这是用于一个单独期望int向量的接口)。
void func(vector<int>a ,vector<int> b,vector<int> c,vector<int> d);
我最初认为扩展矢量是最好的方法,但已经被警告不要这样做
我已经实现了
get_a_vec(vector<obj>);
等等,但这有点笨拙。有什么好的选择吗?
提前感谢!
编写一个函数,从单个对象中检索所需的成员。
然后将该函数传递给std::transform
。
例如,如果您有int get_a_member(obj&)
函数,只需调用
std::vector<int> avec;
std::transform(obj_vector.begin(), obj_vector.end(), get_a_member);
如果您想要一个更复杂或可重用的函数,请将其作为函子。然后您可以在它的构造函数中向它传递参数(例如告诉它返回哪个成员)。
您可以编写一个通用函数来从一系列对象中提取任何类成员:
template <typename InIt, typename OutIt, typename Class, typename Member>
void extract(InIt start, InIt end, OutIt out, Member Class::*member) {
for (; start != end; ++start, ++out) {
*out = (*start).*member;
}
}
// Example
int main()
{
std::vector<obj> objs {{1,2,3,4},{5,6,7,8}};
std::vector<int> ints;
extract(objs.begin(), objs.end(), back_inserter(ints), &obj::a);
std::copy(ints.begin(), ints.end(),
std::ostream_iterator<int>(std::cout, "n"));
}
我所理解的是,您想要一个函数,从给定vector
中的obj
中提取a
的值,并将其放入另一个vector
中,如果这是真的,那么我建议使用friend
函数。
在类obj
中声明友元函数允许该函数访问该类的private
数据成员。
class obj {
friend vector<int> get_a_vec(const vector<obj>&);
friend vector<int> get_b_vec(const vector<obj>&);
friend vector<int> get_c_vec(const vector<obj>&);
friend vector<int> get_d_vec(const vector<obj>&);
int a;
int b;
int c;
int d;
};
vector<int> get_a_vec(const vector<obj>& vec)
{
vector<int> result(vec.size());
for (unsigned i = 0;i<vec.size();i++)
result->at(i) = vec[i].a;
return result;
}
相关文章:
- 向量成员在管理类指针C++队列时丢失
- C++:更新类的向量成员变量
- C++ 入门 12.1:我可以在类中使用静态向量成员实现 StrBlob<string> 吗?
- 具有向量成员的基类<int>
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 无法将类构造函数中新创建的对象复制到 C++ 中的向量成员
- 修改另一个类的向量成员时出错
- 返回对私有向量成员元素的非常量引用是否是一种不好的做法
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- std::向量成员变量 EXC_BAD_ACCESS
- 如何使用其定义附近的显式长度/值构造函数初始化向量成员变量
- "Empty"数组\向量成员 C++
- 如何使用初始值设定项列表初始化 2D 向量成员
- 如何在类定义中初始化向量成员变量
- 如何初始化结构的向量成员
- 使用向量<向量>成员实例化对象时的隔离错误<int>
- 为向量成员和更新元素指定默认值
- 保持类的向量成员与类实例连续
- C++:在类构造函数中填充向量后,向量成员被销毁
- 通过引用另一个类方法传递向量成员变量