我想将两个向量相乘(按元素),保存结果,然后取总和。我知道stl算法的功能
std::inner_product(x.begin(), x.end(), y.begin(), 0);
这不会保存产品的结果。你知道这样的函数是否存在而没有得到所有结果元素的总和吗?我自己也找不到这个。我需要对速度进行超级优化。
答案 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;
}