题目要求:在一个二维数组中(每个一维数组的长度都相同),每一行按照从左向右递增的顺序排序,每一列按照从上到下递增的顺序排序请完成一个函数,输入一个这样的二维数组和一个整数,判断数组中是否含有该整数
本文是以此为基础熟悉一些知识点
1.在c++语言中根本就没有二维数组的数据结构的存在。二维数组是在逻辑上形成的。vector的的中文意译为“向量”,不妨可以理解为其中存储的每个对象都是向量,即使一个标量数据也可以理解为是一个只有一个元素的一维向量,或者按照tensorflow中张量的理解,将标量数据理解为零维向量。在c++中,多维数组可以理解为“数组的数组”,也就是数组的每个元素还是数组对象。
2.在c++的vector容器中。
//其中的int指的是容器中存储的元素的数据类型 vector<int> array; //那么当我们存储二维数组的时候,创建的vector容器中 //的每个元素又是一个vector容器,这个容器中存储的是int型元素,故有 vector<vector<int>> array1;
3.在vector的迭代器中。
//其中的int指的是迭代器指向的元素数据类型 vector<int>::iterator it1; //那么当我们存储二维数组的时候,创建的vector容器中 //的每个元素又是一个vector容器,这个容器中存储的是int型元素。 //那么当创建一个迭代器指向二维数组中的第一维元素时, //迭代器指向的元素应该为vector<int> vector<vector<int>>::iterator it2;
最终代码
#include<iostream> #include<vector> using namespace std; //查找二维数组中是否含有某个数的函数 bool find(int target, vector<vector<int>> array ) { bool flag = false; for (vector<vector<int>>::iterator i = array.begin(); i != array.end(); i++) { for (vector<int>::iterator j = (*i).begin(); j != (*i).end(); j++) { if (target == *j) { flag = true; break; } } } return flag; } int main () { //构造一个二维数组 int row_num, cow_num; cout << "请输入行数:" << endl; cin >> row_num; cout << "请输入列数" << endl; cin >> cow_num; //构造二维vector对象。 //每个vector位置存储的是vector<int>型 vector<vector<int>> array; //想vector中添加空行, //要使用一个vector容器创建一个二维数组,那么首先将创建的vector容器的第一维元素都用vector容器对象填充 for (int i = 0; i < row_num; i++) { array.push_back(vector<int>()); } for (int i = 0; i < array.size(); i++) { for (int j = 0; j < cow_num; j++) { cout << "请输入第" << i << "行第" << j << "列的元素:" << endl; int num = 0; cin >> num; array[i].push_back(num); } } //在第一个for循环中,由于每一列vector容器中存储的是vector<int>对象,所以迭代器的指向类型要设置为vector<int>型 for (vector<vector<int>>::iterator i = array.begin(); i != array.end(); i++) { for (vector<int>::iterator j = (*i).begin(); j != (*i).end(); j++) { cout << *j << endl; } } cout << find(100, array) << endl;; };