您的位置:

使用C++ vector实现二维数组

一、vector简介

vector是C++ STL库中的一个容器,它能够动态地调整大小,具有快速的插入和删除操作。可以看作是一个可以像数组一样使用的动态数组,支持下标随机访问。

二、使用vector实现二维数组

#include <vector>
using namespace std;

int main() {
    int row = 3, col = 4;
    vector<vector<int>> arr(row, vector<int>(col));

    // 遍历二维数组
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            arr[i][j] = i * col + j;
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

本例使用vector<vector<int>>定义了一个二维数组,其中第一个vector表示行,第二个vector表示列。初始化时,将行数和列数传入vector的构造函数,即可动态创建一个row行col列的二维数组。

该二维数组与普通数组相似,可以通过arr[i][j]访问二维数组的元素。在遍历二维数组时,可以使用双重循环依次访问二维数组的每个元素。

三、二维数组的动态调整

#include <vector>
using namespace std;

int main() {
    int row = 3, col = 4;
    vector<vector<int>> arr(row, vector<int>(col));

    // 输出原始数组
    cout << "原始数组:" << endl;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            arr[i][j] = i * col + j;
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    // 动态添加一行,列数不变
    row++;
    arr.push_back(vector<int>(col));
    cout << "添加一行后的数组:" << endl;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            arr[i][j] = i * col + j;
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    // 动态添加一列,行数不变
    col++;
    for (int i = 0; i < row; i++) {
        arr[i].push_back(i * col + col - 1);
    }
    cout << "添加一列后的数组:" << endl;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

本例展示了如何使用vector动态调整二维数组的大小。首先定义了一个3行4列的二维数组,并初始化了所有元素。然后,通过arr.push_back增加一行,列数不变;通过arr[i].push_back增加一列,行数不变。每次增加完后,均需重新遍历整个二维数组输出。

四、与普通数组的对比

使用vector实现二维数组,优点在于动态调整大小方便,不需要手动释放内存。同时,vector的操作比普通数组更加灵活,例如vector支持动态追加元素,可以方便地进行插入和删除。相比之下,使用普通数组实现二维数组会有许多不便之处,例如需要手动申请和释放内存,无法进行动态调整等。