C++二维数组arr[3][4]与arr(3, vector<int>(4))的差异

int arr[3][4] 和 vector<vector<int>> arr(3, vector<int>(4)) 都是用于存储二维数组的数据结构,但它们之间有以下几个差异:

1. 内存管理:int arr[3][4] 是一个静态数组,它在编译时就分配了连续的内存空间,大小不可变。而 vector<vector<int>> arr(3, vector<int>(4)) 是一个动态数组,它在运行时分配内存,可以动态地调整大小。
2. 初始化:int arr[3][4] 在定义时可以使用初始化列表来初始化元素,而 vector<vector<int>> arr(3, vector<int>(4)) 在创建时可以通过构造函数来初始化元素。
3. 访问元素:int arr[3][4] 可以使用下标运算符直接访问元素,而 vector<vector<int>> arr(3, vector<int>(4)) 需要使用两个下标运算符来访问元素,例如 arr[i][j]。
4. 内存布局:int arr[3][4] 在内存中是连续存储的,因此可以使用指针运算来访问元素。而 vector<vector<int>> arr(3, vector<int>(4)) 在内存中是分散存储的,每个一维数组都是一个独立的内存块,因此不能使用指针运算来访问元素。
5. 效率:int arr[3][4] 由于是静态数组,因此访问元素的效率较高。而 vector<vector<int>> arr(3, vector<int>(4)) 由于是动态数组,因此在插入和删除元素时需要进行内存分配和释放,因此效率较低。

总之,这两种数据结构各有优缺点,在具体应用中需要根据实际情况选择合适的数据结构。如果需要存储大小固定的二维数组,可以使用 int arr[3][4]。如果需要存储大小可变的二维数组,可以使用 vector<vector<int>> arr(3, vector<int>(4))。

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

int main() {
    // 创建一个3行4列的二维数组
    vector<vector<int>> arr(3, vector<int>(4));

    // 为二维数组赋值
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            arr[i][j] = i * 4 + j;
        }
    }

    // 输出二维数组
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }


    int arr2[3][4];

    // 为二维数组赋值
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            arr2[i][j] = i * 4 + j;
        }
    }

    // 输出二维数组
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            cout << arr2[i][j] << " ";
        }
        cout << endl;
    }


    return 0;
}

--

C++ 标准库中的 `vector` 容器类是一个动态数组,它提供了一系列方法用于管理元素。以下是 `vector` 容器类的一些基本方法:

1. `vector<T> v;` 创建一个空的 `vector` 容器,其中 `T` 是元素的数据类型。
2. `vector<T> v(n);` 创建一个包含 `n` 个元素的 `vector` 容器,每个元素的值都是 `T` 的默认值。
3. `vector<T> v(n, val);` 创建一个包含 `n` 个元素的 `vector` 容器,每个元素的值都是 `val`。

4. `v.push_back(val);` 在 `vector` 容器的末尾添加一个值为 `val` 的元素。
5. `v.pop_back();` 删除 `vector` 容器的末尾元素。
6. `v.size();` 返回 `vector` 容器中元素的个数。
7. `v.empty();` 如果 `vector` 容器为空,则返回 `true`,否则返回 `false`。
8. `v.front();` 返回 `vector` 容器中第一个元素的引用。
9. `v.back();` 返回 `vector` 容器中最后一个元素的引用。
10. `v.clear();` 清空 `vector` 容器中的所有元素。
11. `v.insert(pos, val);` 在 `vector` 容器中的 `pos` 位置插入一个值为 `val` 的元素。
12. `v.erase(pos);` 删除 `vector` 容器中的 `pos` 位置的元素。
13. `v.at(i);` 返回 `vector` 容器中下标为 `i` 的元素的引用。
14. `v[i];` 返回 `vector` 容器中下标为 `i` 的元素的引用。
15. `v.begin();` 返回一个迭代器,指向 `vector` 容器中的第一个元素。
16. `v.end();` 返回一个迭代器,指向 `vector` 容器中的最后一个元素的下一个位置。

这些方法可以用于在 `vector` 容器中添加、删除、访问和遍历元素。需要注意的是,在使用这些方法时需要确保 `vector` 容器中有足够的元素,否则可能会导致程序崩溃或产生未定义行为。

#include <iostream>
#include <vector>

using namespace std;

int main() {
    // 创建一个空的 vector 容器
    vector<int> v;

    // 在 vector 容器的末尾添加元素
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.push_back(6);
    
    // 访问 vector 容器中的元素
    cout << "The first element is " << v.front() << endl;
    cout << "The last element is " << v.back() << endl;
    cout << "The size of the vector is " << v.size() << endl;

    // 使用下标访问元素
    v[1] = 10;
    cout << "The second element is " << v[1] << endl;

    // 使用迭代器访问元素
    vector<int>::iterator it = v.begin();
    while (it != v.end()) {
        cout << *it << " ";
        it++;
    }
    cout << endl;

    // 在 vector 容器中的指定位置插入元素
    v.insert(v.begin() + 1, 5);
    cout << "After inserting 5, the vector is: ";
    for (std::vector<int>::size_type i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    cout << endl;

    // 删除 vector 容器中的元素
    v.erase(v.begin() + 1);
    cout << "After erasing the second element, the vector is: ";
    for (std::vector<int>::size_type i = 0; i < v.size(); i++) {
        cout << v[i] << " ";
    }
    cout << endl;

    // 清空 vector 容器
    v.clear();
    cout << "After clearing the vector, the size is " << v.size() << endl;

    return 0;
}

相关推荐

  1. C++数组arr[3][4]arr(3, vectorint>(4))差异

    2024-04-28 07:58:03       31 阅读
  2. C++数组3

    2024-04-28 07:58:03       49 阅读
  3. __init__args

    2024-04-28 07:58:03       34 阅读
  4. C++vector转换为一vector

    2024-04-28 07:58:03       55 阅读
  5. <span style='color:red;'>ARM</span><span style='color:red;'>32</span>day<span style='color:red;'>4</span>

    ARM32day4

    2024-04-28 07:58:03      36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-28 07:58:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-28 07:58:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-28 07:58:03       82 阅读
  4. Python语言-面向对象

    2024-04-28 07:58:03       91 阅读

热门阅读

  1. Web开发基础概念

    2024-04-28 07:58:03       39 阅读
  2. 基于单片机的煤气泄漏报警系统设计

    2024-04-28 07:58:03       30 阅读
  3. Windows Server2019安全基线等保参考要求

    2024-04-28 07:58:03       33 阅读
  4. OpenMesh 网格主曲率计算

    2024-04-28 07:58:03       34 阅读
  5. 洗鞋店上门预约小程序

    2024-04-28 07:58:03       27 阅读
  6. 深度解析 Spring 源码:揭秘BeanFactory之谜

    2024-04-28 07:58:03       36 阅读
  7. python绘制热点图

    2024-04-28 07:58:03       33 阅读