C++ 在结构 vector 上使用 std::transform

标签 c++ vector struct transform

我有一个 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 这很有效和 secondint 的 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/

相关文章:

c - 链接列表不兼容的指针类型

mongodb - 从 mongodb 中提取嵌套结构数据

c++ - 为什么此代码在模板特化方面有错误

c++ - 如何连接二进制宏值?什么是二进制类型?

c++ - libuv 工作线程或工作队列健康检查?

c++ - std::vector::clear()-ing 二维 vector 线程的内部 vector 是否安全?

c++ - 使用 const_cast<> 时出现意外输出

C++ 对指针 vector 进行排序,其中对象表示矩阵坐标

c++ - 使用指针作为容器迭代器是否违反标准

c - 结构指针的这种使用正确吗?