📜  C++ STL中向量的向量及示例(1)

📅  最后修改于: 2023-12-03 15:29:50.617000             🧑  作者: Mango

C++ STL中向量的向量

在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中向量的向量的用法。