将非零向量成员读入数组并输出点积

时间:2017-09-15 03:47:45

标签: c++ arrays vector structure

我正在尝试编写计算两个给定向量的点积的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 个答案:

答案 0 :(得分: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;
}