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

yizhihongxing

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日

相关文章

  • 一文详解JavaScript数组对象和字符串对象

    一文详解JavaScript数组对象和字符串对象 简介 本文将详细介绍JavaScript中的数组对象和字符串对象,并给出一些示例说明。 数组对象 定义和初始化 在JavaScript中,数组是一个有序的集合,可以通过下标来访问或修改其中的元素。 初始化一个空数组: let arr1 = []; 初始化一个带有初始元素的数组: let arr2 = [1, …

    C 2023年5月23日
    00
  • C语言驱动开发之内核使用IO/DPC定时器详解

    关于C语言驱动开发之内核使用IO/DPC定时器详解,我可以提供以下完整攻略: 一、概述 在C语言驱动开发中,IO定时器和DPC定时器功能非常重要。使用IO定时器可以实现周期性的输入输出操作,DPC定时器则可以延迟处理某个操作。 二、IO定时器 以下是IO定时器的使用流程: 1.初始化定时器 在驱动程序中,我们需要创建一个定时器对象。其中,ntDelayTim…

    C 2023年5月23日
    00
  • 首个 64 位 Windows 2000 系统的测试版本被发现

    首个 64 位 Windows 2000 系统的测试版本被发现攻略 背景介绍 Windows 2000是由微软公司发布的一款操作系统,它的核心采用了Windows NT技术,支持32位和64位处理器。此次发现的首个64位Windows 2000系统测试版本可以让人们更深入地了解Windows 2000的内部结构和设计。 攻略过程 寻找测试版本 首先,需要去寻…

    C 2023年5月23日
    00
  • C语言声明函数指针

    C语言中,函数指针是非常重要的概念之一,它可以用于动态地调用函数、传递在运行时确定的函数等。本文将详细讲解如何在C程序中声明函数指针。 声明函数指针的语法 函数指针的语法如下: return_type (*pointer_name)(arg_type1, arg_type2, …, arg_typeN); 其中,return_type 表示函数返回值的类…

    C 2023年5月9日
    00
  • C语言如何实现Unix时间戳与本地时间转化

    C语言提供了一些标准库函数,可以用来实现Unix时间戳与本地时间的转换。下面是实现这个功能的完整攻略: 获取Unix时间戳 Unix时间戳是指从1970年1月1日开始经过的秒数。在C语言中,可以使用time()函数获取当前的Unix时间戳。time()函数的定义如下: #include <time.h> time_t time(time_t *t…

    C 2023年5月23日
    00
  • 路由协议试题

    路由协议试题完整攻略 概述 路由协议是网络通信中的一种基础技术,它可以帮助数据包在互联网中传输。在网络工程师面试中,路由协议是一道比较常见的试题,重点考察面试者对网络基础知识的掌握能力。本文将围绕路由协议试题的解答方式提供一些完整攻略,方便面试者在实际应用场景中能够熟练应对。 题目解析 题目描述 “请谈一下你是如何确定路由协议的选择的?有哪些常用路由协议?”…

    C 2023年5月23日
    00
  • C++为什么不能修改set里的值?非要修改怎么办?

    C++为什么不能修改set里的值 set是C++ STL库中的一个容器,它使用平衡二叉搜索树作为实现机制。这种数据结构会在插入或删除元素时维护树的平衡,从而使得查找等操作的时间复杂度保持在O(log n)级别。而且,set自身所提供的插入、删除和查找操作也能保证元素的唯一性,因此适用于需要去重的情况。 set中元素的顺序是按照元素的大小由小到大排列的,在该容…

    C 2023年5月23日
    00
  • C语言中如何进行跨平台开发?

    C语言是一种跨平台编程语言,因为它的编译器可以在不同的操作系统上进行编译。然而,由于操作系统本身的不同,开发跨平台应用程序的过程可能会涉及不同的挑战。以下是C语言进行跨平台开发的完整攻略: 选择跨平台的库和框架 一些跨平台库和框架可以帮助开发者更轻松地在不同平台之间移植代码,避免特定于平台的依赖关系。例如,QT是一个开源跨平台GUI框架,可以用于开发Wind…

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