C++二维容器vector的使用及一个经典案例
vector(容器)的调用及初始化
C++使用vector前需要调用其头文件,为了方便最好还要使用命名空间,输入如下:
#include<vector>
using std::vector;
需要注意的是,vector不能容纳对象引用
作为其元素,因为引用不是一个对象。在C++11中,二维容器的定义式可以写成vector<vector< int >>
定义和初始化vector对象主要表中几种方式:
代码表达式 | 中文解释 |
---|---|
vector< T > v1 | v1是一个空vector,它的潜在元素是T类型,执行默认初始化 |
vector< T > v2(v1) | v2是包含v1的全部元素的副本 |
vector< T > v2=v1 | 等价于v2(v1) |
vector< T > v3(n,val) | v3包含n个重复的元素,且每个元素都是val |
vector< T > v4(n) | v4中包含n个重复的默认初始化的元素 |
vector< T > v5{a,b,c,…} | v5用列表进行初始化,元素的值即为列表内的值,注意为花括号 |
vector< T > v5={a,b,c,…} | 等价于v5{a,b,c,…} |
二维vector的插入元素
二维vector插入元素的方式很多,有一种插入格式与其他语言中数组的插入方式非常相似,其代码如下:
vector<vector<int>> array;
for (int i = 0; i < 5; i++)
{
array.push_back(vector<int>());//不断往v2d里加行
}
for (int i = 0; i < array.size(); i++)//行
{
for (int j = 0; j < 5; j++)//添加5列
{
array[i].push_back(i + j);
}
}
for (int i = 0; i < array.size(); i++)
{
for (int j = 0; j < 5; j++)
{
cout << array[i][j] << " ";//使用下标访问
}
cout << endl;
}
先使用push_back()
在二维vectorA中插入五个vectorB元素,再在vectorB中插入五个int型元素。代码运行结果如下:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
经典案例—查找某元素target是否存在二维数组vector中
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。对应代码如下:
bool Find(int target, vector<vector<int> > array) {
int row=array.size();
int col=array[0].size();
int i=row-1;
int j=0;
while(i>=0&&j<col)
{
if(target==array[i][j])
return true;
else if(target<array[i][j])
i--;
else
j++;
}
return false;
}