在C ++中相应地相乘矢量元素

时间:2015-01-21 11:05:35

标签: c++

所以我有两个向量:

vector<int> v1(size);
vector<int> v2(size);

我想要的是计算A[0]*B[0] - A[1]*B[1] - A[2]*B[2] - ... - A[n-1]*B[n-1]。我试过以下

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    size_t size = 4;
    vector<int> product; int i;

    vector<int> v1(size);
    vector<int> v2(size);

    v1[0] = 2;   v2[0] = 4;
    v1[1] = 5;   v2[1] = 1;
    v1[2] = 9;   v2[2] = 6;
    v1[3] = 3;   v2[3] = 7;

    for(i=1;i < v1.size();++i){
        product.push_back(v1[i]*v2[i]);
    }

    for(vector<int>::const_iterator i = product.begin(); i != product.end(); ++i)
    std::cout << *i << ' ';

    return 0;
}

但是,从5 54 21开始,这将返回v1[1]*v2[1], v1[2]*v2[2] and v1[3]*v2[3],我想彼此相减:5-54-21

2 个答案:

答案 0 :(得分:2)

首先,在您的公式中,必须添加第一个产品(IOW为正),而减去其余产品。所以你必须区别对待这两种情况。

其次,您可以通过计算正在进行的结果轻松地执行计算,从零开始:

int result = 0;
if (size >= 1) {
    result += v1[0]*v2[0];
    for (int i = 1; i < size; ++i)
        result -= v1[i]*v2[i];
}
std::cout << result << std::endl;

答案 1 :(得分:1)

怎么样?
vector<int> v1{2,5,9,3};
vector<int> v2{4,1,6,7};

int result = std::inner_product(++v1.beginn(),v1.end(),++v2.begin(),v1[0]*v2[0],std::minus<>,std::multiplies<>);

(使用C ++ 14)

int result = std::inner_product(++v1.beginn(),v1.end(),++v2.begin(),v1[0]*v2[0],std::minus<int>,std::multiplies<int>);

(使用C ++ 98)