动态数组进阶

简介: 动态数组进阶

一、用动态数组储存自定义数据

动态数组不仅仅可以储存基本的数据类型,还能存储自定义数据类型,比如结构体。


二、构造函数减少代码量

我们知道可以通过push_back()来向动态数组添加一个元素。如果我们需要一个长度为n的,全是1的动态数组。可以利用循环来写。


image.png

其实我们可以通过一个构造函数快速构建动态数组。所谓构造函数,就是我们在定义一个对象时可以给他赋予初始值。


image.png

我们在定义一个vector的时候,调用构造函数,第一个参数表示初始的动态数组的长度,第二个参数表示初始的数组里面每个元素的值,如果不传入第二个参数,那么初始值就是0

注意是直接在数组名后面接上(,)


三、二维动态数组

vector > vec2,这样就定义了一个二维的动态数组。

注意: >中间有一个空格,这个空格一定要加上,否则在一些老版本的编译器上将不能通过编译。

二维动态数组的每一维的长度都可以不一样,可以是任意形状的,借助构造函数,我们可以快速构造一个n行m列的动态数组,每个元素的初始值都是0.

vector >vec2(n,vector(m,0));

例题:尝试修复以下代码,使之不会访问非法内存空间


image.png

ABC都是对的,其中C选项第二维不传,默认就是空的,D项不对,我们不能传10,应该传vector变量

例题:用动态数组实现乘法表

TIP:

a.push_back()和a[i].push_back()的区别

a.push_back()表示对动态二维数组第一维赋值,赋值内容一般是vector变量

a[i].push_back()表示对动态二维数组第二维赋值

#include<vector>
using namespace std;
int main()
{
  vector<vector<int> >a;//定义二维动态数组
  for (int i=0;i<5;i++)
  {
    a.push_back(vector<int>());
  }//为5维动态数组,小vector内为空
  for (int i=0;i<a.size();i++)
  {
    for (int j=0;j<=i;j++)
    {
      a[i].push_back((i+1)*(j+1));//对二维数组赋值
    }
  }
  for (int i=0;i<a.size();i++)
  {
    for (int j=0;j<a[i].size(); j++)
    {
      cout << i + 1 << '*' << j + 1 << '='<<a[i][j] << '\t';//\t为制表符,每一列对齐
    }
    cout << endl;
  }
  return 0;
}
1.
相关文章
|
6月前
|
存储 索引
【C进阶】顺序表详解
【C进阶】顺序表详解
|
6月前
|
存储 消息中间件 算法
数据结构从入门到精通——顺序表
顺序表是一种常见的线性数据结构,它使用一段连续的存储单元依次存储数据元素。这种数据结构的特点是逻辑上相邻的元素在物理存储位置上也相邻,因此可以快速地访问表中的任意元素。 顺序表的实现通常依赖于数组,数组是一种静态的数据结构,一旦创建,其大小就是固定的。这意味着在顺序表中插入或删除元素可能会导致空间的浪费或不足。例如,如果在一个已经满了的顺序表中插入一个新元素,就需要重新分配更大的数组空间,并将原有元素复制到新数组中,这是一个相对耗时的操作。
122 0
|
3月前
|
存储 测试技术
【初阶数据结构篇】顺序表的实现(赋源码)
线性表(linearlist)是n个具有相同特性的数据元素的有限序列。
31 0
|
6月前
|
存储 算法
【数据结构与算法 | 基础篇】模拟ArrayList实现的“动态数组“
【数据结构与算法 | 基础篇】模拟ArrayList实现的“动态数组“
20 如何使用数组使用栈和队列
如何使用数组使用栈和队列
65 1
数据结构入门(C语言版)线性表中顺序表介绍及接口实现(下)
在顺序表中,头插相对于尾插来说就不是那么简单了,这里主要是让顺序表整体向后移动,再在头部插入数据。
|
6月前
|
算法 C语言
数据结构与算法顺序表数组版
博主还在学校,写网络编程特别是后面的线程和多路I/O实在是太费精力,所以博主先把数据结构多跟新一点,也正好把学校的C语言数据结构的作业做了,正好一举两得
43 0
|
6月前
|
存储 算法
【408数据结构与算法】—顺序表的定义(三)
【408数据结构与算法】—顺序表的定义(三)
|
存储 设计模式 算法
数据结构之第四章、ArrayList和顺序表
在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:【说明】ArrayList是以泛型方式实现的,使用时必须要先实例化ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的和Vector不同,
52 0
|
存储 机器学习/深度学习 算法
数据结构入门(C语言版)线性表中顺序表介绍及接口实现(上)
不论在程序员的工作上,还是在学习或是考研上,数据结构都是一门非常重要且值得我们一直研究探索的学科,可以说数据结构和算法就是编程的核心。OK,接下来我们来到数据结构的入门第一步就是学习线性表,接下来由作者来详细介绍数据结构第一章线性表。