当前位置:首页 > C++ > 正文

C++向量运算详解(从零开始掌握C++ vector实现向量加减与点积)

在科学计算、图形学、机器学习等领域,C++向量运算是一项基础而重要的技能。本文将手把手教你如何使用C++标准库中的 std::vector 实现基本的向量操作,包括向量加法、减法和点积(内积)。即使你是编程小白,也能轻松上手!

C++向量运算详解(从零开始掌握C++ vector实现向量加减与点积) C++向量运算  C++ vector教程 向量加减法C++ C++线性代数编程 第1张

什么是向量?

在数学中,向量是一个有方向和大小的量,通常用一组数字表示(例如二维向量 [x, y] 或三维向量 [x, y, z])。在C++中,我们可以使用 std::vector<double> 来存储这些数值。

准备工作:包含必要头文件

首先,我们需要包含以下头文件:

#include <iostream>#include <vector>#include <stdexcept>  // 用于异常处理

1. 向量加法

两个向量相加,就是对应位置的元素相加。例如:[1, 2] + [3, 4] = [4, 6]

我们先写一个函数来实现这个功能,并确保两个向量长度相同:

std::vector<double> addVectors(const std::vector<double>& a, const std::vector<double>& b) {    if (a.size() != b.size()) {        throw std::invalid_argument("向量维度不一致,无法相加!");    }        std::vector<double> result(a.size());    for (size_t i = 0; i < a.size(); ++i) {        result[i] = a[i] + b[i];    }    return result;}

2. 向量减法

向量减法同理,对应元素相减:

std::vector<double> subtractVectors(const std::vector<double>& a, const std::vector<double>& b) {    if (a.size() != b.size()) {        throw std::invalid_argument("向量维度不一致,无法相减!");    }        std::vector<double> result(a.size());    for (size_t i = 0; i < a.size(); ++i) {        result[i] = a[i] - b[i];    }    return result;}

3. 向量点积(内积)

点积是两个向量对应元素相乘后再求和,结果是一个标量(单个数字)。例如:[1, 2] · [3, 4] = 1×3 + 2×4 = 11

double dotProduct(const std::vector<double>& a, const std::vector<double>& b) {    if (a.size() != b.size()) {        throw std::invalid_argument("向量维度不一致,无法计算点积!");    }        double result = 0.0;    for (size_t i = 0; i < a.size(); ++i) {        result += a[i] * b[i];    }    return result;}

完整示例程序

下面是一个完整的可运行示例,演示了如何使用上述函数:

#include <iostream>#include <vector>#include <stdexcept>std::vector<double> addVectors(const std::vector<double>& a, const std::vector<double>& b) {    if (a.size() != b.size()) {        throw std::invalid_argument("向量维度不一致,无法相加!");    }    std::vector<double> result(a.size());    for (size_t i = 0; i < a.size(); ++i) {        result[i] = a[i] + b[i];    }    return result;}double dotProduct(const std::vector<double>& a, const std::vector<double>& b) {    if (a.size() != b.size()) {        throw std::invalid_argument("向量维度不一致,无法计算点积!");    }    double result = 0.0;    for (size_t i = 0; i < a.size(); ++i) {        result += a[i] * b[i];    }    return result;}int main() {    std::vector<double> v1 = {1.0, 2.0, 3.0};    std::vector<double> v2 = {4.0, 5.0, 6.0};    auto sum = addVectors(v1, v2);    double dot = dotProduct(v1, v2);    std::cout << "v1 + v2 = [";    for (size_t i = 0; i < sum.size(); ++i) {        std::cout << sum[i];        if (i != sum.size() - 1) std::cout << ", ";    }    std::cout << "]\n";    std::cout << "v1 · v2 = " << dot << std::endl;    return 0;}

小结

通过本教程,你已经掌握了如何用C++实现基本的C++向量运算,包括加法、减法和点积。这些操作是C++线性代数编程的基础,也是学习更高级算法(如机器学习或物理模拟)的重要一步。

记住,在实际项目中,你也可以考虑使用成熟的数学库(如Eigen、Armadillo),但理解底层原理对提升编程能力至关重要。希望这篇C++ vector教程对你有所帮助!

如果你正在学习向量加减法C++实现,不妨动手敲一遍代码,加深理解!