我有一个 C++
应用 struct
看起来像:
struct test_struc {
std::string name;
int x;
int y;
std::vector<int> data;
};
我想转换两个 std::vector<test_struc>
根据他们的 data
使用线路结构中的元素。到目前为止,我有代码:
std::vector<test_struc> first = <from somewhere else>;
std::vector<test_struc> second = <from somewhere else>;
std::vector<int> result;
std::transform (second.begin(), second.end(), first.begin(), result.begin(), op_xor);
哪里op_xor
是:
int op_xor (int &i,
int &j) {
return i^j;
}
如果 first
这很有效和 second
是 int
的 vector ,但由于它们不是,我不知道如何告诉代码使用 data
test_struc
的元素作为 std::transform
的参数.
我是不是找错了树?或者有没有办法做到这一点?
最佳答案
请注意,至少对于现代编译器,您可能希望将操作实现为 lambda 表达式,因此它看起来像这样:
std::transform(second.begin(), second.end(),
first.begin(),
std::back_inserter(result),
[](test_struct const &a, test_struct const &b) {
return a.y ^ b.y;
});
次要的:事实上,你有 UB,试图在 result
的大小为 0 时通过 result.begin()
写入。你可以使用 back_inserter
如上所述,或者您可以定义 result
将其大小初始化为 second.size()
。
关于C++ 在结构 vector 上使用 std::transform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21531070/