先决条件: C++ STL中的向量
向量被称为动态数组,具有在插入或删除元素时自动调整自身大小的能力,并且容器自动处理其存储。
向量的向量是具有可变行数的二维向量,其中每一行都是向量。向量的每个索引都存储一个向量,可以使用迭代器遍历和访问该向量。它类似于向量数组,但具有动态属性。
句法:
vector> vec;
例子:
vector> vec{ { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9, 4 } };
where vec is the vector of vectors with different
number of elements in different rows
在向量的向量中插入
可以使用C++ STL的push_back()函数将元素插入向量中。
下面的示例演示了在向量的向量中的插入操作。该代码使用push_back()函数创建2D向量,然后显示矩阵。
句法:
vector_name.push_back(value)
where value refers to the element
to be added in the back of the vector
范例1:
v2 = {1, 2, 3}
v1.push_back(v2);
此函数将向量v2推入向量v1的向量中。因此v1变成{{1,2,3}}。
范例2:
v2 = {4, 5, 6}
v1.push_back(v2);
此函数将向量v2推入向量v1的现有向量中,并且v1变为v1 = {{{1,2,3},{4,5,6}}
以下是演示插入向量载体的示例。
// C++ program to demonstrate insertion
// into a vector of vectors
#include
#include
using namespace std;
// Defining the rows and columns of
// vector of vectors
#define ROW 4
#define COL 5
int main()
{
// Initializing the vector of vectors
vector > vec;
// Elements to insert in column
int num = 10;
// Inserting elements into vector
for (int i = 0; i < ROW; i++) {
// Vector to store column elements
vector v1;
for (int j = 0; j < COL; j++) {
v1.push_back(num);
num += 5;
}
// Pushing back above 1D vector
// to create the 2D vector
vec.push_back(v1);
}
// Displaying the 2D vector
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;
}
10 15 20 25 30
35 40 45 50 55
60 65 70 75 80
85 90 95 100 105
向量向量中的删除或删除
可以使用C++ STL的pop_back()函数从向量的向量中删除元素。
下面的示例演示了向量向量中的删除操作。该代码使用pop_back()函数从2D向量中删除元素,然后显示矩阵。
句法:
vector_name[row_position].pop_back()
示例1:让向量的向量为向量v = {{{1,2,3},{4,5,6},{7,8,9}}
v[2].pop_back()
此函数从最后一行向量中删除元素9。因此v变为{{1,2,3},{4,5,6},{7,8}。
范例2:
v[1].pop_back()
此函数从最后的第二行向量中删除元素6。因此v变为{{1,2,3},{4,5},{7,8}}。
以下是演示从向量载体中删除的示例。
// C++ program to demonstrate removal
// from a vector of vectors
#include
#include
using namespace std;
// Driver Method
int main()
{
// Initializing 2D vector "vect" with
// sample values
vector > vec{ { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
// Removing elements from the
// last row of the vector
vec[2].pop_back();
vec[1].pop_back();
// Displaying the 2D vector
for (int i = 0; i < 3; i++) {
for (
auto it = vec[i].begin();
it != vec[i].end(); it++)
cout << *it << " ";
cout << endl;
}
return 0;
}
1 2 3
4 5
7 8
向量的遍历
向量的向量可以使用C++中的迭代器遍历。以下代码演示了2D向量的遍历。
句法:
for i in [0, n)
{
for (iterator it = v[i].begin();
it != v[i].end(); it++)
{
// Operations to be done
// For example to print
print(*it)
}
}
以下是演示向量向量中遍历的示例。
// C++ code to demonstrate traversal
// of a 2D vector
#include
#include
using namespace std;
// Driver Method
int main()
{
// Initializing 2D vector "vect" with
// sample values
vector > vec{ { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
// Displaying the 2D vector
for (int i = 0; i < 3; i++) {
for (
auto it = vec[i].begin();
it != vec[i].end(); it++)
cout << *it << " ";
cout << endl;
}
return 0;
}
1 2 3
4 5 6
7 8 9