2015-01-21 3 views
0

Так у меня есть два вектора:Умножить элементы вектора соответственно в 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.

+0

print '- 'вместо пространства? – saadtaame

+0

@saadtaame, который создаст строку '5-54-21-'. – schmitsz

+0

В эти дни вы можете сэкономить несколько символов с помощью 'vector v1 {2,5,9,3};', 'vector v2 {4,1,6,7};' и 'for (auto p: product) cout << p << ''; ' – Michael

ответ

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; 
+0

Я полностью пропустил это. Принят ASAP, спасибо за ваше время :) – schmitsz

+0

без проблем:) ⁣⁣ – bgoldst

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)

Смежные вопросы