创建二维数组:

vector<int> vec(4,2); //将含有4个数据的一维动态数组初始为2
vector< vector<int> > asd1(row, vector<int>(column, 0)); //初始化row*column二维动态数组,初始化值为0

获取数组长度:

对于一维数组,可以使用size()获取其长度。
int size = asd.size();对于二维数组,可以使用以下方法获取行、列的长度。
int size_row = asd1.size();          //获取行数
int size_column = asd1[0].size();    //获取列数

赋值

直接赋值即可
asd1[1][1] = 1;
cout << asd1[1][1] <<endl;

增加操作

根据需求,增加操作可分为增加行和增加列。增加行列元素,可以使用vector提供的方法push_back()或insert()。对于增行,可以使用asd1.push_back(asd);,其中asd是vector<int>。对于增加列中的元素,需要指定插入的行,可以使用asd1[0].push_back(23);完成插入操作。使用insert()时,需要使用迭代器才能完成在相应位置的插入操作。

asd1[1].push_back(23);   //插入列元素
asd1.push_back(asd);     //插入一行

删除操作

删除同样分为删除行和删除列,使用vector中的erase方法完成该操作,erase去除迭代器所指位置的元素。删除行时,需要使用到第一维度的vector的迭代器:

auto test1 = asd1.begin();
asd1.erase(++test1);

删除列元素时,需要使用第二维度的迭代器:

auto test2 = test1.begin();
asd1[0].erase(++test2);

查改、遍历操作

operation[ ]用于访问指定的元素,返回对指定位置的元素的引用pos。如果只是简单的获取数据或查看数据使用a[row][column]即可。

遍历是一个常用的操作,通过遍历可以了解数组中是否存在相应的元素。遍历二维vector中所有的元素方法如下:

void Print(vector<vector<int>> a)
{vector<vector<int> >::iterator p1;vector<int>::iterator p2;for (p1 = a.begin(); p1 != a.end(); p1++){for (p2 = p1->begin(); p2 != p1->end(); p2++){cout << "[" << *p2 << "]";}cout <<endl;}cout <<endl;
}

完整代码:

#include <iostream>
#include <array>
#include <vector>
#include <cstring>using namespace std;void Print(vector<vector<int>> a)
{vector<vector<int> >::iterator p1;vector<int>::iterator p2;for (p1 = a.begin(); p1 != a.end(); p1++){for (p2 = p1->begin(); p2 != p1->end(); p2++){cout << "[" << *p2 << "]";}cout <<endl;}cout <<endl;
}int main()
{int i = 0;vector <int> asd(4,2); //将含有4个数据的一维动态数组初始为2vector<std::vector<int> > asd1(4,vector<int>(4,0)); //初始化row*column二维动态数组,初始化值为0vector<std::vector<int> >::iterator p1;vector <int>::iterator p2;//简单初始化for (p1 = asd1.begin(); p1 != asd1.end(); p1++){for (p2 = p1->begin(); p2 != p1->end(); p2++){*p2 = i++;}}cout << "Init:" <<endl;Print(asd1);//插入列元素用push_backasd1[1].push_back(23);asd1.push_back(asd);/*//设置行列数int size_row = asd1.size();             //获取行数cout << "size_row:" << size_row <<endl;asd1.resize(10);                        //设置行数size_row = asd1.size();                 //获取行数cout << "size_row:" << size_row <<endl;int size_col = asd1[0].size();cout << "size_col:" << size_col <<endl;asd1[1].resize(10);                     //设置列数size_col = asd1[1].size();cout << "size_col:" << size_col <<endl;*/cout << "Push_back:" <<endl;Print(asd1);cout << "Erase:" <<endl;auto test1 = asd1.begin();test1 = test1 + 3;asd1.erase(test1);Print(asd1);return 0;
}

C++ 动态二维数组(二维vector)相关推荐

  1. php 二位数组随机,PHP多维数组 php打乱数组二维数组多维数组的简单实例

    php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 上面这个是针对二维数组的! 下面针对多维数组的乱序方法?尽可能的方便快速: 以下函数也是出自php手册,可 ...

  2. php 数组重新打乱_php打乱数组二维数组多维数组的简单实例

    php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 function shuffle_assoc($list) { if (!is_array($list)) ...

  3. python二维数组去重复_python 去除二维数组/二维列表中的重复行方法

    python 去除二维数组/二维列表中的重复行方法 之前提到去除一维数组中的重复元素用unique()函数,如果要去除二维数组中的重复行该怎么操作呢? import numpy as np arr = ...

  4. 数组(一维数组、多维数组/二维数组)和简单排序算法

    提示:数组是线性数据结构中最为基础,最为典型的一种顺序型结构. 它用一组连续的内存空间 ,来存储一组具有相同类型的数据. 与变量相比,变量是一种单一的数据存储方式,而数组是用于存储一连串的一组数据. ...

  5. 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读)

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  6. c++ vector二维数组初始化与vector切片

    0.用vector模拟二维数组 实际开发过程中,经常会使用vector嵌套的方式来模拟二维数组,下面我们详细分析一下如何对其进行初始化. 1.逐个初始化 首先我们采用逐个初始化的方式,对二维vecto ...

  7. 如何将二维数组赋值给vector

    一维数组: vector<int> a; int b[5] = {1,2,3,4,5}; a.push_back(b);二维数组: b[5][6] = {1,2,3,4,5,6...27, ...

  8. 数组: 数组的遍历: 二维数组: 二维数组的遍历方式:

    数组:   变量: 存储单个数据 数组: 存储多个数据数组: 相同数据类型的有序集合一段连续的内存空间特点:1.引用数据类型2.长度一旦确定不可改变3.存储的多个数据要求数据类型一致4.数组是有序的索 ...

  9. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组内存大小计算 | 指针跳转步长问题 )

    文章目录 一.二维数组内存大小计算 二.二维数组内存大小意义 一.二维数组内存大小计算 给定一个二维数组 : 该 二维数组 中有 444 个 一维数组 , 每个一维数组有 101010 个 char ...

最新文章

  1. java swt窗口,SWT Java:如何防止窗口调整大小?
  2. Kubernetes与docker集群管理常见问题解析
  3. stringBuffer、StringBuilder、排序、Arrays、Jdk1.5新特性(java基础知识十三)
  4. [Spark]PySpark入门学习教程---介绍(1)
  5. STL学习笔记5--map and multimap
  6. 【github相关】之h264bitstream
  7. linux redis集群工具,Redis集群部署及常用的操作命令
  8. ffmpeg mp4视频流解码
  9. Caused by: javax.security.auth.login.LoginException: unable to find LoginModule class: com.ibm.secur
  10. ambari mysql 开机自动启动_ambari的服务启动顺序如何设置
  11. python倒计时代码turtle_python实现屏保计时器
  12. Sping入门(1) 了解依赖注入(DI)和应用切片(AOP)
  13. 三天,我通过了Apsara Clouder基础技能认证:阿里巴巴Android开发规范
  14. ABAP_各模块实用底表
  15. 火火火---12幅算法生成火的图像
  16. Communication error with Jack server
  17. 请求https接口时报错:Caused by SSLError(SSLError(1, u‘[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi
  18. 【知识图谱 赵军 学习笔记】第十章 知识问答与对话
  19. 桌面环境与桌面搜索Desktop Search tools
  20. Numpy——np.diag()一文看懂

热门文章

  1. PostgreSQL学习笔记4之常用数据类型
  2. cocos2d-x初探学习笔记(9)--粒子系统
  3. 1_4 BuilderMode 建造者模式
  4. WinPcap编程调试解决办法
  5. MongoDB可视化工具--Robo 3T 使用教程
  6. 干货 | Elasticsearch开发人员最佳实战指南
  7. 如何让 Spring Boot 启动的更快?
  8. Linux下通用的Makefile
  9. 无重叠区间及用最少的箭射爆气球
  10. 【线上分享】移动音视频SDK工程实践之数据采集和处理