【发布时间】:2012-11-03 02:47:49
【问题描述】:
我正在尝试为我的编程任务实现一个欧几里得向量。我需要重载 operator* 来为具有任意相同维度的两个向量提供点积计算。 以 3D 向量为例:
矢量 v1, v2; //两个 3D 向量。
双点积 = v1 * v2;
dotProduct的值应该是v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
所以,我的问题是如何在 numeric.h 头文件中不使用任何显式循环和 std::accumulate() 操作来获取此值?因为这些在本次作业中是被禁止的。
附:我可以将仿函数(自定义)与 STL 算法一起使用。
【问题讨论】:
-
1) 你知道操作数总是三维的吗? 2) 什么是
Vector? -
正如您所写的
dotProduct = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2],在我看来,您已经知道如何解决这个问题。你尝试过什么,你到底卡在哪里? -
没有
<numeric.h>,只有<numeric>。 Your answer is on this page。 (提示:点积是什么的一种类型?) -
您尝试计算的内容通常称为内积。用这种想法搜索现有算法可能会很有成效。
-
std::for_each 在不允许使用内置循环时可能会很好地发挥作用。