STL算法元素明智的乘法没有和

时间:2015-05-12 20:48:44

标签: c++ algorithm stl

我想将两个向量相乘(按元素),保存结果,然后取总和。我知道stl算法的功能

std::inner_product(x.begin(), x.end(), y.begin(), 0);

这不会保存产品的结果。你知道这样的函数是否存在而没有得到所有结果元素的总和吗?我自己也找不到这个。我需要对速度进行超级优化。

1 个答案:

答案 0 :(得分:1)

似乎你的意思是标准算法std::transform

如果你想在两个第三个向量中存储两个向量的相应元素的产品,那么你可以像

那样写
#include <algorithm>
#include <iterator>
#include <vector>
#include <functional>

//,,,

std::vector<int> v1 = { /*...*/ };
std::vector<int> v2 = { /*...*/ };
std::vector<int> v3;

v3.reserve( v1.size() );

std::transform( v1.begin(), v1.end(), v2.begin(),
                std::back_inserter( v3 ),
                std::multiplies<>() );

或更完整的例子

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <functional>


int main()
{
    std::vector<int> v1 = { 1, 2, 3 };
    std::vector<int> v2 = { 3, 2, 1 };
    std::vector<int> v3;

    v3.reserve( v1.size() );

    std::transform( v1.begin(), v1.end(), v2.begin(),
                    std::back_inserter( v3 ),
                    std::multiplies<>() );

    for ( int x : v3 ) std::cout << x << ' ';
    std::cout << std::endl;
}

程序输出

3 4 3 

或者最好对上面示例中的产品使用long long int类型

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <functional>


int main()
{
    std::vector<int> v1 = { 1, 2, 3 };
    std::vector<int> v2 = { 3, 2, 1 };
    std::vector<long long int> v3;

    v3.reserve( v1.size() );

    std::transform( v1.begin(), v1.end(), v2.begin(),
                    std::back_inserter( v3 ),
                    std::multiplies<long long int>() );

    for ( int x : v3 ) std::cout << x << ' ';
    std::cout << std::endl;
}