2017-09-15 40 views
0

我正在尝试编写计算两个给定向量的点积的C++程序。在向量a和b中,只有非零元素将被存储到结构数组中。我想我无法正确地将矢量读入结构数组中。 请指教。 预先感谢您读取非零向量成员到阵列和输出点产品

#include <iostream> 
#include <vector> 
using namespace std; 

const int n=10; /* vector size limit */ 
struct element { 
int x; /* original index of non-zero array element */ 
int val ; /* integer non-zero value at index x */ 
}; 
element row[n]; 
element col[n]; 

int i; 
vector<int> a={0,0,7,0,5,0,0,8,0,4,-1}; 
vector<int> b={0,0,0,5,6,0,0,0,0,5,-1}; 

void generate_row_and_col() 
{ 
    for (i=0; i<=n; i++) 
    { 
     if(a[i]=!0) 
     { 
      row[i].x=i; 
      row[i].val=a[i]; 
     } 
    } 
    for (i=0; i<=n; i++) 
    { 
     if(b[i]!=0) 
     { 
      col[i].x=i; 
      col[i].val=b[i]; 
     } 
    } 
} 
int dotproduct() 
{ 
/* calculate the dot product of row and col output the result*/ 
int i=0; 
int j=0; 
int product=0; 
while(row[i].x!=-1 && col[j].x!=-1) 
{ 
    if(row[i].x == col[j].x) 
    { 
     product=product+row[i].val*col[j].val; 
     i++; 
     j++; 
    } 
    else if(row[i].x<col[j].x) 
    { 
     i++; 
    } 
    else 
    { 
     j++; 
    } 
} 
return product; 
} 
int main() 
{ 
generate_row_and_col() ; 
int r; 
r=dotproduct(); 
cout<<"result="<<r<<endl; 
return 0; 
} 
+1

*我试图写C++是计算给定的两个向量的点积程序* - [性病:: inner_product(HTTP ://en.cppreference.com/w/cpp/algorithm/inner_product)完成这项工作。实际上,这是一个不使用无关数组的3行程序,这包括通过简单调用'std :: stable_partition'去除零元素。 – PaulMcKenzie

回答

0

dotproduct()必须像

int dotproduct() 
{ 
    /* calculate the dot product of row and col output the result*/ 
    int i=0; 
    int j=0; 
    int product=0; 
    while(row[i].val != -1) 
    { 
     j = 0; 
     while(col[j].val != -1) 
     { 
      if(row[i].x == col[j].x) 
      { 
       product=product+row[i].val*col[j].val; 
       break; 
      } 
      j++; 
     } 
     i++; 
    } 
    return product; 
} 
+0

我应该得到50作为结果,但在这种情况下,我得到102 – mwater07

+0

我认为我的dotproduct功能有问题,如果它不是发电机功能 – mwater07