C++中vector的用法实例解析

C++中vector的用法实例解析

什么是vector

vector是C++ STL(Standard Template Library)中的一个容器,它是一个动态数组,可以自动扩展空间,并提供随机访问和快速尾部插入/删除等操作。vector内部存储的元素在内存中是连续存储的,因此可以通过数组下标直接访问元素,效率非常高。

vector的基本用法

创建一个vector对象

#include <vector>
using namespace std;

vector<int> vec; // 创建一个空的vector
vector<int> vec(10);  // 创建一个包含10个元素的vector,初始值全部为0
vector<int> vec(10, 1);  // 创建一个包含10个元素的vector,初始值全部为1

访问vector中的元素

vector<int> vec = {1, 2, 3, 4, 5};

int value = vec[0];  // 通过下标访问元素,注意下标越界的情况
int value2 = vec.at(1);  // 使用at()方法访问元素,会进行越界检查
int back_value = vec.back();  // 访问尾部元素
int front_value = vec.front(); // 访问头部元素
int* data_ptr = vec.data(); // 获取指向内存中存储元素的指针

向vector中添加/删除元素

vector<int> vec = {1, 2, 3, 4, 5};

vec.push_back(6); // 在尾部插入元素
vec.pop_back(); // 删除尾部元素

vec.insert(vec.begin()+2, 10); // 在第三个位置插入元素10
vec.erase(vec.begin()+1); // 删除第二个位置的元素
vec.clear(); // 删除所有元素,使vector变为空

示例1:使用vector实现队列

下面是一个使用vector实现队列的示例,其中包括了队列的入队、出队、查询队首元素等操作。

#include <iostream>
#include <vector>
using namespace std;

class Queue {
public:
    Queue() {}
    bool empty() const {
        return data.empty();
    }
    int size() const {
        return data.size();
    }
    void push(int num) {
        data.push_back(num);
    }
    void pop() {
        if (!empty()) {
            data.erase(data.begin());
        }
    }
    int front() {
        if (!empty()) {
            return data.front();
        } else {
            return -1;
        }
    }
private:
    vector<int> data;
};

int main() {
    Queue q;
    q.push(1);
    q.push(2);
    cout << q.front() << endl;
    q.pop();
    cout << q.front() << endl;
    q.pop();
    cout << q.empty() << endl;
    return 0;
}

示例2:使用vector实现矩阵运算

下面是一个使用vector实现矩阵运算的示例,包括了矩阵加法、矩阵减法、矩阵乘法等操作。

#include <iostream>
#include <vector>
using namespace std;

vector<vector<int>> matrixAdd(vector<vector<int>>& m1, vector<vector<int>>& m2) {
    int row = m1.size(), col = m1[0].size();
    vector<vector<int>> res(row, vector<int>(col));

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            res[i][j] = m1[i][j] + m2[i][j];
        }
    }

    return res;
}

vector<vector<int>> matrixSubtract(vector<vector<int>>& m1, vector<vector<int>>& m2) {
    int row = m1.size(), col = m1[0].size();
    vector<vector<int>> res(row, vector<int>(col));

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            res[i][j] = m1[i][j] - m2[i][j];
        }
    }

    return res;
}

vector<vector<int>> matrixMultiply(vector<vector<int>>& m1, vector<vector<int>>& m2) {
    int row = m1.size(), col1 = m1[0].size(), col2 = m2[0].size();
    vector<vector<int>> res(row, vector<int>(col2));

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col2; j++) {
            for (int k = 0; k < col1; k++) {
                res[i][j] += m1[i][k] * m2[k][j];
            }
        }
    }

    return res;
}

int main() {
    vector<vector<int>> m1 = {{1, 2}, {3, 4}};
    vector<vector<int>> m2 = {{5, 6}, {7, 8}};

    vector<vector<int>> res1 = matrixAdd(m1, m2);
    vector<vector<int>> res2 = matrixSubtract(m1, m2);
    vector<vector<int>> res3 = matrixMultiply(m1, m2);

    for (auto row : res1) {
        for (auto num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    for (auto row : res2) {
        for (auto num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    for (auto row : res3) {
        for (auto num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    return 0;
}

以上就是vector的用法实例解析,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中vector的用法实例解析 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C语言使用setjmp和longjmp实现一个简单的协程

    下面是C语言使用setjmp和longjmp实现一个简单的协程的完整攻略。 什么是协程 协程是一种并发编程模型,可以看做是一种用户空间的轻量级线程。协程特点是占用资源少,切换代价低,不需要线程上下文切换的开销,仅通过自己写的切换机制进行上下文切换。由于协程不需要访问操作系统资源,因此基本不会发生阻塞的现象,其在I/O密集型任务中具有很好的应用前景。 使用se…

    C 2023年5月24日
    00
  • C语言 枚举类型(Enum)详解及示例代码

    那我来详细讲解一下“C语言 枚举类型(Enum)详解及示例代码”。 什么是枚举类型? 枚举类型是C语言中的一种基本数据类型,它是一组预定的常量的集合,在某些情况下可以用于替代常量。 枚举类型采用关键字enum定义,格式如下: enum 枚举名{ 枚举常量1, 枚举常量2, …… }; 其中,枚举常量默认从0开始,依次递增1,也可以手动指定初值。 枚举类型的应…

    C 2023年5月24日
    00
  • Linux中文件系统truncate.c详解

    Linux中文件系统truncate.c详解 什么是truncate.c文件 truncate.c文件是Linux内核中负责处理文件截断操作的核心文件。其主要功能是截断指定文件的长度,可以对文件进行缩短或扩展。在Linux系统的文件系统中,文件截断操作是文件的常用操作之一。 truncate.c文件操作示例 1. 文件截断操作 truncate.c文件主要包…

    C 2023年5月24日
    00
  • win7启动程序时弹出异常代码c0000005怎么办?

    下面是“win7启动程序时弹出异常代码c0000005”的完整攻略: 问题描述 在启动某些程序时,可能会遇到异常代码c0000005的错误提示,例如: 异常代码c0000005,详细信息是:ACCESS_VIOLATION 解决方案 方案一:更新或重装程序 可能是程序本身存在问题,建议先到官网下载最新版本安装或者尝试重装程序,看看能否解决问题。 方案二:检查…

    C 2023年5月23日
    00
  • C++中的类与对象深度解析

    C++中的类与对象深度解析 在C++中,类(class)是一种用户自定义的数据类型,它由数据成员和成员函数组成。类中的数据成员可以是各种类型,包括内置类型、自定义类型以及指针等,成员函数则是负责操作这些数据成员的函数。类可以看做是一种数据的集合和对这些数据的一些操作的封装。 类的定义 定义类的基本语法如下: class 类名 { 访问修饰符: 数据成员声明 …

    C 2023年5月22日
    00
  • C语言 图文并茂详解程序编译过程

    C语言 图文并茂详解程序编译过程 编译器是将我们编写的源代码转化成执行文件的工具。在C语言中,利用编译器可以将代码编译成目标代码,并链接到可执行文件中。下面是程序编译的详细过程。 程序编译的各个阶段 1. 预处理阶段 预处理器会进行一些特定的替换和指令扩展,例如#include指令将头文件添加到源代码文件中,宏定义将对代码中使用宏的地方进行替换。预处理器会生…

    C 2023年5月23日
    00
  • C中静态变量和寄存器变量的区别

    首先我们来看一下C语言中静态变量和寄存器变量的区别。 静态变量 定义 静态变量是指在函数或者代码块中定义的变量,其生命周期和程序的运行周期相同,不会在作用域结束后立刻销毁。 初始化 静态变量默认初始化为0。 作用域 静态变量的作用域与具体定义位置相关: 在代码块中定义的静态变量,它的作用域是该代码块; 在函数中定义的静态变量,它的作用域是整个函数。 不同源文…

    C 2023年5月10日
    00
  • 浅谈c++ hook 钩子的使用介绍

    浅谈C++ Hook 钩子的使用介绍 1. 什么是Hook钩子? Hook钩子是一种可以监控和修改系统、进程或应用程序行为的技术。在Windows操作系统下,可以通过Hook技术对API函数进行钩取,实现拦截API调用并进行自定义的处理。 2. Hook钩子的类型 在Windows操作系统中,可以使用以下两种类型的Hook钩子: 2.1 系统级钩子 系统级钩…

    C 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部