offer-first

题目要求:在一个二维数组中(每个一维数组的长度都相同),每一行按照从左向右递增的顺序排序,每一列按照从上到下递增的顺序排序请完成一个函数,输入一个这样的二维数组和一个整数,判断数组中是否含有该整数
本文是以此为基础熟悉一些知识点

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;;
};
原文地址:https://www.cnblogs.com/hxhlrq/p/12673520.html