• 【vector】创建一个二维vector当作二维数组用


     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int m, n;
     8     cin >> m >> n;
     9     vector<vector<int> > value(m, vector<int>(n)); // 两个>用空格分开
    10     for (int i = 0; i < m; i++){
    11         for (int j = 0; j < n; j++){
    12             int temp;
    13             cin >> temp;
    14             value[i].push_back(temp);
    15         }
    16     }
    17 
    18 }

    7月15日更新:

    在使用二维数组的时候,考虑到传参数时需要指定列数的大小的不便性,起初是想用二维vector,后面为了操作的方便性,用了一维数组取代二维数组作为形参。

    又查了对二维vector的赋值,简单到跟二维数组很相似。

     1 #include <iostream>
     2 #include <vector>
     3 
     4 using namespace std;
     5 
     6 int main(){
     7     int row, col;
     8     cin >> row >> col;
     9     vector<vector<int>> ivec(row);
    10     for (int i = 0; i < row; i++){
    11         ivec[i].resize(col); //指定了大小
    12         for (int j = 0; j < col; j++){
    13             int val;
    14             cin >> val;
    15             //ivec[i].push_back(val);
    16             ivec[i][j] = val;
    17         }
    18     }
    19     for (int i = 0; i < row; i++)
    20         for (int j = 0; j < col; j++)
    21             cout << ivec[i][j] << " ";
    22 
    23     return 0;
    24 }

    7月17日更新:

    做leetcode上二叉树层次遍历后,把结果存储在二维vector上的题,看讨论区别人的代码,看到另外的创建二维数组的方法。

     1 int main(){
     2     vector<vector<int>> ivec;
     3     int m, n;
     4     cin >> m >> n;
     5     for (int i = 0; i < m; i++){
     6         ivec.push_back(vector<int>()); //vector<int>()是一空vector 和上一种方法resize可等同
     7         for (int j = 0; j < n; j++){
     8             int temp;
     9             cin >> temp;
    10             ivec[i].push_back(temp);
    11         }
    12     }
    13     for (int i = 0; i < m; i++)
    14         for (int j = 0; j < n; j++)
    15             cout << ivec[i][j] << " ";
    16 
    17     return 0;
    18 }

    注意二维vector的行、列大小的确定

    int row = value.size();
    int col = value[0].size();

    附《剑指offer》中“二维数组中的查找”一题

    题目描述

    在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
    举一个例子
    1  2   8    9
    2  4   9    12
    4  7   10  13
    6  8   11   15

    要找出7是否存在,把目标数跟该数组的右上角/左下角做对比,缩小查找的范围。

     1 class Solution {
     2 public:
     3     bool Find(vector<vector<int> > array,int target) {
     4         if (array.empty())
     5             return false;
     6         int lenRow = array.size();
     7         int lenCol = array[0].size();
     8          
     9         int row = 0;
    10         int col = lenCol - 1;
    11         while (row < lenRow && col >= 0){
    12             if (array[row][col] == target)
    13                 return true;
    14             else if (array[row][col] > target)
    15                 col--;          
    16             else
    17                 row++;
    18         }
    19        return false;
    20     }
    21 };
  • 相关阅读:
    java实现23种设计模式之中介者模式
    java实现23种设计模式之访问者模式
    java实现23种设计模式之状态模式
    java实现23种设计模式之备忘录模式
    java实现23种设计模式之命令模式
    java实现23种设计模式之责任链模式
    VS2012+OpenCV2.4.9+OpenTLD环境搭建
    Real-time Compressive Tracking
    OpenTLD相关资料
    华为面试题
  • 原文地址:https://www.cnblogs.com/cnblogsnearby/p/4611452.html
Copyright © 2020-2023  润新知