代码之家  ›  专栏  ›  技术社区  ›  shuttle87 Bhargav Boda

将一个函数应用于两个stl向量

  •  0
  • shuttle87 Bhargav Boda  · 技术社区  · 14 年前

    以下是我要做的一些伪代码:

    vector<T> a;
    vector<T> b;
    vector<T> result;
    
    for (int i = 0; i < a.size(); ++i){
        result.at(i) = a.at(i)  op  b.at(i);
    }
    

    其中“op”是为T类型定义的一些运算符。

    3 回复  |  直到 14 年前
        1
  •  8
  •   CB Bailey    14 年前

    你可能需要检查一下尺寸,但一般来说你可以用 std::transform .

    例如(用于) + - <functional> 包含用于此运算符和其他二进制运算符的函数对象的类模板)

    std::transform( a.begin(), a.end(), b.begin(), result.begin(), std::plus<T>() );
    

    你需要确保 b.size() >= a.size() result.size() >= a.size() . 如果 result 开始时为空,然后可以使用 back_insert_iterator 在不需要先调整容器大小的情况下填充它。

        2
  •  3
  •   fingerprint211b    14 年前
        3
  •  0
  •   Alexandre C.    14 年前

    好吧,我可能错了,但是:

    简短回答:否

    long answer : perhaps something clever should be done about it, but writing the code as a loop is much more readable.

    它提醒我以下问题:

    "given a vector x and a vector y of same size, permute elements of x and y simultaneously such that y is sorted according to some predicate"

    我不能用一些STL算法直接解决(除了繁琐的ad-hoc迭代器类,可能是通用的,但是硬写快速排序更容易——这就是为什么我和C++有一种爱恨关系)。