C++动态开辟二维数组详解:new与vector实现

需积分: 10 2 下载量 133 浏览量 更新于2024-09-16 收藏 25KB DOC 举报
++的朋友们都知道,`std::vector` 是STL(Standard Template Library)中非常重要的一个容器,它可以用来存储一维或二维的数据。对于二维数组,我们可以使用`vector`的嵌套来实现,这样不仅可以动态地创建和管理内存,而且在很多情况下更加安全和方便。 以下是一个使用`std::vector`来动态开辟二维数组的例子: ```cpp #include <iostream> #include <vector> #include <iomanip> int main() { int row, col; std::cin >> row >> col; // 使用vector创建二维数组 std::vector<std::vector<int>> element(row, std::vector<int>(col)); // 输入二维数组 std::cout << std::endl; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { std::cin >> element[i][j]; } } // 输出二维数组 std::cout << std::endl; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { std::cout << std::setw(5) << element[i][j]; } std::cout << std::endl; } // vector会在其生命周期结束时自动释放内存,无需手动销毁 return 0; } ``` 在这个例子中,我们首先定义了一个`vector<vector<int>>`类型的`element`,它的大小是`row`行`col`列。当我们通过`std::cin`输入数据时,`vector`会自动扩展来容纳这些值。输出时,我们同样可以通过索引来访问每个元素。由于`vector`内部管理了内存,所以不需要像使用`new`那样手动`delete`来释放内存,这大大简化了代码并减少了内存泄漏的风险。 这两种方法各有优缺点。`new`操作符开辟的二维数组更加灵活,可以直接控制内存的分配和释放,但同时也需要程序员自己处理内存管理,容易出现内存泄漏。而`std::vector`则提供了更高级的抽象,自动管理内存,使得代码更简洁、更安全,但可能会有轻微的性能开销。 在实际编程中,应根据具体需求选择合适的方法。如果对内存管理有特殊要求或追求极致性能,可能需要使用`new`操作符。而在大多数情况下,使用`std::vector`可以提供更好的代码可读性和可维护性。