【算法刷题】C++ vector 容器、矩阵乘法(洛谷B2105附面经)

写在前面的话

金九银十,秋招在即,最近有没有打卡学习呢?今天我们借洛谷的一道面试笔试题B2105来学一学线性代数的矩阵乘法和C++ vector 容器的简单使用。
在这里插入图片描述

一、矩阵乘法

1.1 定义

矩阵的乘法指的是一般矩阵的乘积,设A为 m x p 的矩阵,B为 p x n 的矩阵,那么称 m x n 的矩阵C为矩阵A与B的乘积,记作C= AB.

1.2 运算

若要把矩阵与矩阵相乘,我们要计算行与列的"点积"。
这是什么意思?
这里我们来看个例子
求 第一行 和 第一列 :
在这里插入图片描述
“点积” 是把 对称的元素相乘,然后把结果加起来:
(1, 2, 3) • (7, 9, 11) = 1×7 + 2×9 + 3×11 = 58
这是第一行与第二列:在这里插入图片描述

(1, 2, 3) • (8, 10, 12) = 1×8 + 2×10 + 3×12 = 64
同理我们可以得到剩下的两个元素的值
在这里插入图片描述

二、vector 容器

vector 是C++标准模板库(STL)中的一个动态数组类。它提供了动态调整大小的功能,并且可以方便地进行元素的插入、删除和访问操作,不需要手动分配和释放内存。

2.1 基本特性

  1. 动态大小:vector 的大小可以根据需要自动增长和缩小。
  2. 连续存储:vector 中的元素在内存中是连续存储的,这使得访问元素非常快速。
  3. 可迭代:vector 可以被迭代,你可以使用循环(如 for 循环)来访问它的元素。
  4. 元素类型:vector 可以存储任何类型的元素,包括内置类型、对象、指针等。

2.2 使用场景

  1. 当你需要一个可以动态增长和缩小的数组时。
  2. 当你需要频繁地在序列的末尾添加或移除元素时。
  3. 当你需要一个可以高效随机访问元素的容器时。

注意:要使用 vector,需要包含头文件

#include <vector>

2.3 函数方法

1.定义
std::vector,其中 T 是元素的类型。

std::vector<int> myVector; // 创建一个存储整数的空 vector

2.初始化
std::vector myVector; 或 std::vector myVector(n, value),在创建时指定初始大小和初始值。

std::vector<int> myVector(5); // 创建一个包含 5 个整数的 vector,每个值都为默认值(0)
std::vector<int> myVector(5, 10); // 创建一个包含 5 个整数的 vector,每个值都为 10

3.访问元素
myVector[i] 或 myVector.at(i),使用下标操作符 [] 或 at() 方法访问 vector 中的元素

int x = myVector[0]; // 获取第一个元素
int y = myVector.at(1); // 获取第二个元素

3.添加元素
myVector.push_back(value),使用 push_back 方法向 vector 中添加元素

myVector.push_back(7); // 将整数 7 添加到 vector 的末尾

4.删除元素:
myVector.erase() ,使用erase() 方法删除 vector 中的元素

myVector.erase(myVector.begin() + 2); // 删除第三个元素

5.获取大小
myVector.size(),使用 size() 方法获取 vector 中元素的数量

int size = myVector.size(); // 获取 vector 中的元素数量

6.清空
myVector.clear(),使用 clear() 方法清空 vector 中的所有元素

myVector.clear(); // 清空 vector

2.4 简单示例

2.4.1 一维 vector

以下是一个完整的使用实例,包括创建 vector、添加元素、访问元素以及输出结果
示例代码

#include <iostream>
#include <vector>

int main() {
   
   
    // 创建一个空的整数向量
    std::vector<int> myVector;

    // 添加元素到向量中
    myVector.push_back(3);
    myVector.push_back(7);
    myVector.push_back(11);
    myVector.push_back(5);

    // 访问向量中的元素并输出
    std::cout << "Elements in the vector: ";
    for (int element : myVector) {
   
   
        std::cout << element << " ";
    }
    std::cout << std::endl;

    // 访问向量中的第一个元素并输出
    std::cout << "First element: " << myVector[0] << std::endl;

    // 访问向量中的第二个元素并输出
    std::cout << "Second element: " << myVector.at(1) << std::endl;

    // 获取向量的大小并输出
    std::cout << "Size of the vector: " << myVector.size() << std::endl;

    // 删除向量中的第三个元素
    myVector.erase(myVector.begin() + 2);

    // 输出删除元素后的向量
    std::cout << "Elements in the vector after erasing: ";
    for (int element : myVector) {
   
   
        std::cout << element << " ";
    }
    std::cout << std::endl;

    // 清空向量并输出
    myVector.clear();
    std::cout << "Size of the vector after clearing: " << myVector.size() << std::endl;

    return 0;
}

2.4.2 二维 vector

二维 vector 可以看作是 vector 的 vector,即 std::vector<std::vector>。
示例代码

#include <iostream>
#include <vector>

int main() {
   
   
    // 创建一个3x3的二维整数向量,并将所有元素初始化为0
    std::vector<std::vector<int>> myMatrix(3, std::vector<int>(3, 0));

    // 添加元素到二维向量中
    myMatrix[0][0] = 1;
    myMatrix[0][1] = 2;
    myMatrix[0][2] = 3;
    myMatrix[1][0] = 4;
    myMatrix[1][1] = 5;
    myMatrix[1][2] = 6;
    myMatrix[2][0] = 7;
    myMatrix[2][1] = 8;
    myMatrix[2][2] = 9;

    // 访问二维向量中的元素并输出
    std::cout << "Elements in the matrix:" << std::endl;
    for (const auto& row : myMatrix) {
   
   
        for (int element : row) {
   
   
            std::cout << element << " ";
        }
        std::cout << std::endl;
    }

    // 访问二维向量中的特定元素并输出
    std::cout << "Element at (0, 1): " << myMatrix[0][1] << std::endl;
    std::cout << "Element at (2, 2): " << myMatrix[2][2] << std::endl;

    // 获取二维向量的大小并输出
    std::cout << "Number of rows: " << myMatrix.size() << std::endl;
    std::cout << "Number of columns in the first row: " << myMatrix[0].size() << std::endl;

    // 修改二维向量中的元素
    myMatrix[1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ahual_cici

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值