📅  最后修改于: 2023-12-03 15:29:50.617000             🧑  作者: Mango
在C++标准模板库(STL)中,向量(vector)是一个非常常用的容器类。除了容器类中的元素可以是任意类型外,STL还提供了向量的向量(vector of vectors),可用于处理多维数组等。本文将介绍STL中向量的向量的使用方法及示例。
向量的向量即为一个包含向量的向量(container of containers),是一种可用于表示多维数组或矩阵等的数据结构。在STL中,我们可以使用嵌套的向量容器来实现向量的向量。
定义一个向量的向量时,可以使用STL提供的vector模板类,并在模板参数中指定元素类型为vector即可。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个包含3个元素的向量的向量
vector<vector<int>> vec(3);
// 访问向量的向量中的元素
vec[0].push_back(1);
vec[0].push_back(2);
vec[1].push_back(3);
vec[2].push_back(4);
// 打印向量的向量中的元素
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
cout << vec[i][j] << " ";
}
cout << endl;
}
return 0;
}
上述代码定义了一个包含3个元素的向量的向量,并分别将它们的第一个元素赋值为{1, 2}、第二个元素赋值为{3}、第三个元素赋值为{4}。最后遍历输出向量的向量中的元素,结果为:
1 2
3
4
向量的向量也可以像单个向量一样进行拷贝和移动操作。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个包含2个元素的向量的向量
vector<vector<int>> vec1(2, vector<int>(2, 0));
vec1[0][0] = 1;
vec1[0][1] = 2;
vec1[1][0] = 3;
vec1[1][1] = 4;
// 拷贝操作
vector<vector<int>> vec2(vec1);
cout << "vec2: " << endl;
for (int i = 0; i < vec2.size(); i++) {
for (int j = 0; j < vec2[i].size(); j++) {
cout << vec2[i][j] << " ";
}
cout << endl;
}
// 移动操作
vector<vector<int>> vec3(move(vec1));
cout << "vec3: " << endl;
for (int i = 0; i < vec3.size(); i++) {
for (int j = 0; j < vec3[i].size(); j++) {
cout << vec3[i][j] << " ";
}
cout << endl;
}
return 0;
}
上述代码实现了向量的向量的拷贝和移动操作,其中向量的向量的拷贝使用vector的复制构造函数,移动操作则使用了STL提供的move函数。最后输出结果为:
vec2:
1 2
3 4
vec3:
1 2
3 4
除了初始化、拷贝和移动操作外,向量的向量还支持其它常见操作。下面介绍向量的向量的常见操作及示例:
向向量的向量中添加元素,可以使用内层向量的push_back成员函数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个包含2个元素的向量的向量
vector<vector<int>> vec(2);
// 添加元素
vec[0].push_back(1);
vec[0].push_back(2);
vec[1].push_back(3);
vec[1].push_back(4);
// 打印向量的向量中的元素
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
cout << vec[i][j] << " ";
}
cout << endl;
}
return 0;
}
向向量的向量中删除元素,可以使用内层向量的pop_back成员函数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个包含2个元素的向量的向量
vector<vector<int>> vec(2);
// 添加元素
vec[0].push_back(1);
vec[0].push_back(2);
vec[1].push_back(3);
vec[1].push_back(4);
// 删除元素
vec[1].pop_back();
// 打印向量的向量中的元素
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
cout << vec[i][j] << " ";
}
cout << endl;
}
return 0;
}
向向量的向量中插入元素,可以使用内层向量的insert成员函数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个包含2个元素的向量的向量
vector<vector<int>> vec(2);
// 添加元素
vec[0].push_back(1);
vec[0].push_back(2);
vec[1].push_back(3);
vec[1].push_back(4);
// 插入元素
vec[1].insert(vec[1].begin()+1, 5);
// 打印向量的向量中的元素
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[i].size(); j++) {
cout << vec[i][j] << " ";
}
cout << endl;
}
return 0;
}
向向量的向量中查找元素,可以使用内层向量的find成员函数。
#include <iostream>
#include <vector>
using namespace std;
int main() {
// 定义一个包含2个元素的向量的向量
vector<vector<int>> vec(2);
// 添加元素
vec[0].push_back(1);
vec[0].push_back(2);
vec[1].push_back(3);
vec[1].push_back(4);
// 查找元素
vector<int>::iterator it = find(vec[0].begin(), vec[0].end(), 2);
if (it != vec[0].end()) {
cout << "Element found in vec[0]" << endl;
} else {
cout << "Element not found in vec[0]" << endl;
}
return 0;
}
本文介绍了STL中向量的向量的定义、初始化、拷贝、移动以及常见操作。向量的向量是一种非常实用的数据结构,能够处理多维数组或矩阵等问题。如果您经常需要处理多维数组或矩阵等问题,建议您多掌握STL中向量的向量的用法。