在这篇文章中,我们介绍了在C++中做两个矢量的点积的两种不同方法。这涉及到C++ STL(标准模板库)中inner_product方法的使用。
目录:
- 向量和点积的介绍
- C++中的点积:迭代法
- C++中的点积:STL中的inner_product法
前提是。C++ STL中的向量
让我们开始学习C++中两个向量的点积。
矢量和点积的介绍
矢量是一个既有大小又有方向的物理量,而标量是一个只有大小而没有方向的物理量。
点积的几何定义将两个向量a和b之间的点积定义为
a.b = |a||b|cosθ
在矢量代数中,点积是两个矢量的相应元素的乘积之和。
一对不同的标准单位矢量(单位矢量是量级为1的矢量)之间的点积为零:
i⋅j = i⋅k = j⋅k = 0.
i、j和k分别是沿x、y和z方向的单位向量。
一个单位向量与它本身的点积是1:
i⋅i = j⋅j = k⋅k = 1
例如,我们给出两个向量V1 = a1*i + b1*j + c1*k 和V2 = a2*i + b2*j + c2*k ,其中i、j和k是沿x、y和z方向的单位向量。那么点积的计算方法是
V1.V2 = a1*a2 + b1*b2 + c1*c2
点积的结果是一个标量。
C++中的点积:迭代法
- 使用迭代法
#include <bits/stdc++.h>
using namespace std;
int dot_product(vector<int> &v1, vector<int> &v2){
int product = 0;
for(int i=0;i<v1.size();i++)
product += v1[i] * v2[i];
return product;
}
int main() {
vector<int> V1 ;
vector<int> V2;
int length1,length2,input,product = 0;
cout<<"Enter size of first vector:";
cin >> length1;
cout<<"Enter size of second vector:";
cin >> length2;
cout << "Enter elements of the first vector:";
for(int i=0;i<length1;i++){
cin>>input;
V1.push_back(input);
}
cout << "Enter elements of the second vector:";
for(int i=0;i<length2;i++){
cin>>input;
V2.push_back(input);
}
cout << "Dot product : " << dot_product(V1,V2);
return 0;
}
输出:
Enter size of first vector:5
Enter size of second vector:5
Enter elements of the first vector:1 2 3 4 5
Enter elements of the second vector:2 4 6 8 10
Dot product : 110
解释:
这里我们通过向量进行迭代,找到相应元素的乘积之和,即
1*2 + 2*4 + 3*6 + 4*8 + 5*10 = 110
C++中的点积:STL中的inner_product
- 使用std::inner_product
#include<iostream>
#include<numeric>
#include<vector>
using namespace std;
int main(){
vector<int> v1 { 1, 2, 3, 4, 5,};
vector<int> v2 { 2, 4, 6, 8, 10};
cout << "Dot Product : " << inner_product(v1.begin(), v1.end(), v2.begin(), 0) << endl;
}
输出:
Dot Product : 110
解释:
std::inner_product被包含在<numeric> 头文件中。它计算两个范围的乘积之和。第一个范围是由begin/end 迭代器给出的,表示第一个序列中的初始和最终位置。第二个范围只由初始位置给出。它需要的元素数量与第一个范围相同。该方法需要另一个参数,init ,它是乘积之和的初始值。这里我们的初始值是0 。返回值是init和给定范围内所有元素对的乘积的累积结果。
通过OpenGenus的这篇文章,你一定对如何在C++原生和使用C++ STL中的函数做两个向量的点积有了深刻的认识。