C++中using namespace std的作用以及vector数组的使用
本文为自我学习记录,主要包括C++中
- using namespace std的作用
- vector数组的使用
文章目录
- C++中using namespace std的作用以及vector数组的使用
- 一、 using namespace std
- 二、vector数组
- 2.1 使用 vector<vector<int>> 和 int s[][]定义二维数组区别
- 2.2 vector数组的插入,删除,修改操作
一、 using namespace std
在一个最简单的helloworld的代码中,我们有使用到一行特殊的代码就是using namespace std
,那为什么每次写C++代码时都需要进行使用空间说明呢?
#include <iostream>
//使用命名空间std
using namespace std;
int main(void) {
int a=10;
cout << "Hello, world!" << endl;
cin >> "a= " >> a;
return 0;
}
using namespace std
:这行代码是用来告诉编译器,我们希望在代码中使用std命名空间中的标识符,而不需要在每个标识符前面加上std::前缀。
但是,并不是每个人都喜欢使用using namespace std;
,因为它可能导致命名冲突,特别是当不同命名空间中的标识符具有相同的名称时。为了避免这种情况,一些人选择显式地在代码中使用std::
前缀,而不是使用using namespace std;
。
使用空间说明是为了明确指定使用哪个命名空间中的标识符,这样可以提高代码的可读性和可维护性,特别是在大型项目中。虽然在小型项目或示例代码中使用using namespace std;
可能更方便,但在实际的生产代码中,最好显式地使用命名空间说明来避免潜在的问题。
二、vector数组
使用 vector
定义一个二维数组,实际上是使用 vector
嵌套 vector
的方式来表示二维数组。这种方式有一些特性:
-
动态大小: 使用
vector
嵌套vector
可以方便地实现动态大小的二维数组。即使在运行时,也可以根据需要动态调整数组的大小,而不必提前知道数组的大小。 -
方便的访问: 使用
vector
嵌套vector
可以方便地通过双重索引访问数组元素。例如,对于二维数组vector<vector<int>> matrix
,可以使用matrix[i][j]
来访问第i
行第j
列的元素。 -
灵活的操作: 使用
vector
嵌套vector
可以方便地进行插入、删除、修改等操作。可以通过调整内部vector
的大小来实现插入和删除操作,也可以直接修改元素的值。 -
内存管理:
vector
会自动处理内存管理,包括内存的分配和释放,避免了手动管理内存的复杂性和可能出现的错误。当不再需要使用二维数组时,vector
会自动释放所占用的内存,避免内存泄漏的风险。
总的来说,使用 vector
定义二维数组具有灵活性高、易于操作和内存管理自动化等特性,使得它成为在 C++ 中表示二维数组的一种常用方式。
2.1 使用 vector<vector> 和 int s[][]定义二维数组区别
使用 vector<vector<int>>
和 int s[][]
定义二维数组有一些区别:
-
动态大小:
vector<vector<int>>
:使用vector
嵌套vector
定义的二维数组可以动态调整大小,即在运行时可以根据需要添加或删除行和列。int s[][]
:使用数组方式定义的二维数组大小是固定的,需要在定义时指定行和列的大小,无法在运行时动态调整大小。
-
内存管理:
vector<vector<int>>
:vector
会自动管理内存,包括动态分配和释放内存,避免了手动管理内存的复杂性和可能出现的错误。int s[][]
:使用数组方式定义的二维数组需要手动管理内存,包括内存的分配和释放。在堆上动态分配数组需要使用new
和delete
,而栈上定义数组大小固定,无法动态释放内存。
-
访问方式:
vector<vector<int>>
:可以使用双重索引方式访问数组元素,即matrix[i][j]
。int s[][]
:同样可以使用双重索引方式访问数组元素,即s[i][j]
。
-
复制和传递:
vector<vector<int>>
:可以直接进行复制和传递,传递的是对象的副本。int s[][]
:无法直接进行复制和传递,传递的是指向数组的指针,需要使用指针或引用进行传递。
-
易用性和灵活性:
vector<vector<int>>
:更灵活易用,可以方便地进行插入、删除、修改等操作。int s[][]
:操作起来不如vector
方便,因为需要手动管理内存,且在定义时需要固定大小,无法动态调整。
综上所述,vector<vector<int>>
的方式更加灵活,易于使用和管理,尤其在需要动态调整大小和方便操作时更为方便,而使用数组方式定义的二维数组则更加静态和限制较多。
2.2 vector数组的插入,删除,修改操作
当使用 vector
定义二维数组时,经常需要进行插入、删除、修改等操作。下面我将通过示例代码来详细讲解这些操作:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个二维 vector 数组
vector<vector<int>> matrix;
// 插入操作
// 插入一行数据 {1, 2, 3}
matrix.push_back({1, 2, 3});
// 插入一行数据 {4, 5, 6}
matrix.push_back({4, 5, 6});
// 输出当前数组
cout << "Original matrix:" << endl;
for (const auto& row : matrix) {
for (int num : row) {
cout << num << " ";
}
cout << endl;
}
// 修改操作
// 将第一行的第二个元素修改为10
matrix[0][1] = 10;
// 输出修改后的数组
cout << "\nMatrix after modification:" << endl;
for (const auto& row : matrix) {
for (int num : row) {
cout << num << " ";
}
cout << endl;
}
// 删除操作
// 删除第二行
matrix.erase(matrix.begin() + 1);
// 输出删除后的数组
cout << "\nMatrix after deletion:" << endl;
for (const auto& row : matrix) {
for (int num : row) {
cout << num << " ";
}
cout << endl;
}
return 0;
}
这段代码演示了以下操作:
- 插入操作:使用
push_back()
方法向二维数组末尾插入一行数据。 - 修改操作:直接通过
双重索引方式
修改数组元素的值。 - 删除操作:使用
erase()
方法删除指定位置的行。
输出内容:
这些操作可以通过双重索引来访问和修改二维数组中的元素,从而实现插入、删除和修改等功能。