gpt4 book ai didi

c++ - 在 C++ 中计算两个 vector 的标量积

转载 作者:IT老高 更新时间:2023-10-28 22:15:51 30 4
gpt4 key购买 nike

我正在尝试编写一个带有 double_product(vector<double> a, vector<double> b) 函数的程序计算两个 vector 的标量积。标量积是

$a_{0}b_{0}+a_{1}b_{1}+...+a_{n-1}b_{n-1}$.

这就是我所拥有的。这是一团糟,但我正在努力!

#include <iostream>
#include <vector>

using namespace std;

class Scalar_product
{
public:
Scalar_product(vector<double> a, vector<double> b);
};
double scalar_product(vector<double> a, vector<double> b)
{
double product = 0;
for (int i = 0; i <= a.size()-1; i++)
for (int i = 0; i <= b.size()-1; i++)
product = product + (a[i])*(b[i]);
return product;
}

int main() {
cout << product << endl;
return 0;
}

最佳答案

除非您需要自己执行此操作(例如,编写它是家庭作业),否则您应该真正使用已经编写好的标准算法来完成您想要的操作:

#include <iostream>
#include <numeric>
#include <vector>

int main() {
std::vector<double> a {1, 2, 3};
std::vector<double> b {4, 5, 6};

std::cout << "The scalar product is: "
<< std::inner_product(std::begin(a), std::end(a), std::begin(b), 0.0);
return 0;
}

请注意,虽然 begin(a)end(a) 在 C++11 中是新的,但 std::inner_product 已经从 C++98 开始可用。如果您使用的是 C++ 98(或 03),则很容易编写自己的 beginend 等价物来处理数组:

template <class T, size_t N>
T *begin(T (&array)[N]) {
return array;
}

template <class T, size_t N>
T *end(T (&array)[N]) {
return array + N;
}

使用这些,以前代码的 C++ 98 版本可能如下所示:

int main() {
double a[] = {1, 2, 3};
double b[] = {4, 5, 6};

std::cout << "The scalar product is: "
<< std::inner_product(begin(a), end(a), begin(b), 0.0);
return 0;
}

请注意,上面的 beginend 仅适用于数组,其中 beginend 在C++11(及更高版本)也适用于定义 .begin().end() 的普通集合类型(尽管添加重载来处理是微不足道的当然,这些也是):

template <class Coll>
typename Coll::iterator begin(Coll const& c) { return c.begin(); }

template <class Coll>
typename Coll::iterator end(Coll const& c) { return c.end(); }

关于c++ - 在 C++ 中计算两个 vector 的标量积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10908012/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com