c++ - 将两个范围的值相加并将它们放入第三个范围的算法

标签 c++ boost c++11 stl

我只是想知道是否有任何东西(在 c++11 或 boost 中)可以帮助我做这样的事情:

std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {2, 5, 4};
std::list<int> res;
algorithm(v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(res), std::plus<int>());

结果当然应该是 {3, 7, 7} 而不是 std::plus 的地方可以是任何 binary_function。

所以如果有人有想法,请告诉我。

最佳答案

为了好玩,我将指出 std::vectorstd::transform 的替代方案。您可以改用 std::valarray

#include <valarray>
#include <iostream>

int main() { 
    std::valarray<int> a = {1, 2, 3};
    std::valarray<int> b = {2, 5, 4};

    std::valarray<int> c = a + b;    // look ma, no transform!

    for (int i=0; i<3; i++)
        std::cout << c[i] << "\t";
}

结果:

3       7       7

不幸的是,尽管将 valarray 相加的代码简单明了,但 valarray 从未获得太多人气。因此,我们留下了一个相当奇怪的情况,即使像上面这样的代码让我觉得非常干净、直接和可读,但仍然几乎有资格被混淆,仅仅是因为很少有人习惯它。

关于c++ - 将两个范围的值相加并将它们放入第三个范围的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16984582/

相关文章:

c++ - boost::atomic 的 header 是什么

c++ - 这些存储指针数组的方法有区别吗?

c++ - Qt Creator 2.6.1 + Qt 5 + C++11 + MSVC2010 编译器

c++ - 打印最大元素的索引

c++ - async_pipe 子进程上的 async_read 不提供任何数据

c++ - boost 或 Visual Studio 2010 中的内存泄漏

c++ - 自定义分配器兼容性

c++ - 使用正则表达式进行范围检查?

c++ - 如何读取bmp中的一个像素一个像素

c++ - 如何使用 Gradle 的 cpp-library 和 cpp-application 插件指定自定义 GCC/G++ 编译器位置?