文章目录

  • 1. 重写、重载和隐藏
  • 2. 链表和数组有什么区别
  • 3. vector的底层原理
  • 4. vector的reserve和resize
  • 5.vector迭代器失效的情况

1. 重写、重载和隐藏

重写
所谓重写,就是在继承中,子类重新定义父类的方法,这里需要注意的是:

  • 必须在有继承关系的类中重写;
  • 子类重写的方法名和参数列表必须与父类的方法名和参数列表一致;
  • 父类方法用 virtual 修饰;
  • 子类方法用 override 修饰;
  • 重写一般用于接口实现和继承类的方法改写;
  • 不管访问父类还是子类的方法,都是调用的子类的方法。

重载
所谓重载就是在同一个作用域中,存在多个名称相同但参数列表不同的方法,通过穿点不同的实参来决定具体调用哪个方法。这里有一点需要注意:返回值不同不能称为重载。同样我们来通过代码看一下重载:

隐藏
隐藏就比较有意思了,隐藏又称覆盖,父类方法中不做声明,子类方法中通过 new 关键字讲方法隐藏,但是他不会改变父类方法,也就是说:访问父类,调用父类方法,访问子类,调用子类方法。这个跟重写不同。我们在使用隐藏的时候需要注意以下几点:

  • 隐藏的方法的标志必须要和被隐藏的方法的标志完全匹配;
  • 隐藏的方法的返回值必须和被隐藏的方法的返回一致;
  • 隐藏的方法所抛出的异常必须和被隐藏方法的所抛出的异常一致,或者是其子类;
  • 被隐藏的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行隐藏。

2. 链表和数组有什么区别

  • 存储形式:数组是一块连续的空间,声明时就要确定长度。链表是一块可不连续的动态空间, 长度可变,每
    个结点要保存相邻结点指针。
  • 数据查找:数组的线性查找速度快,查找操作直接使用偏移地址。链表需要按顺序检索结点, 效率低。
  • 数据插入或删除:链表可以快速插入和删除结点,而数组则可能需要大量数据移动。
  • 越界问题:链表不存在越界问题,数组有越界问题。

注 意 : 在 选 择 数 组 或 链 表 数 据 结 构 时 , 一 定 要 根 据 实 际 需 要 进 行 选 择 。 数 组 便 于 查 询 , 链 表 便 于 插 入 删 除 。 数 组 节 省 空 间 但 是 长 度 固 定 , 链 表 虽 然 变 长 但 是 占 了 更 多 的 存 储 空 间 。

3. vector的底层原理

首先创造一个容器vector a;,会生成三个指针,first,last,end。(last是不断移动的),初始化一个空的容器,三个指针均为空,因此capacity(end-first)和size(last-first)都为0。
(size是当前vector容器真实占用的大小,也就是容器当前拥有多少个元素。capacity是指预分配的内存空间。)

capacity==size,容器此时已满,若再要加入新的元素时,就要重新进行内存分配,进行内存扩充。

vector 容器扩容的过程需要经历以下 3 步:

  1. 完全弃用现有的内存空间,重新申请更大的内存空间;
  2. 将旧内存空间中的数据,按原有顺序移动到新的内存空间中;
  3. 最后将旧的内存空间释放。

因为所有的vector是顺序存储的,在后面push_back一个新的元素超过容器的capacity时,会开辟一个新的更大的内存空间(不一定是2倍),开辟多大的内存空间与windows,linux,编译器有关。开辟了新的连续的内存空间后,会将之前整体存放到新的内存空间中。
例如VS中,扩充是之前的百分之50(win)
在linux中,扩充是之前的2倍。

4. vector的reserve和resize

reserve是直接扩充到已经确定的大小,可以减少多次开辟、释放空间的问题(优化push_back),就可以
提高效率,其次还可以减少多次要拷贝数据的问题。reserve只是保证vector中的空间大小(capacity)最少
达到参数所指定的大小n。reserve()只有一个参数。

resize()可以改变有效空间的大小,也有改变默认值的功能。capacity的大小也会随着改变。resize()可以有
多个参数。
resize()函数的作用是改变vector元素个数
resize(n,m)第二个参数可以省略
n代表改变元素个数为n,m代表初始化为m.

5.vector迭代器失效的情况

当插入一个元素到vector中,由于引起了内存重新分配,所以指向原内存的迭代器全部失效。

当删除容器中一个元素后,该迭代器所指向的元素已经被删除,那么也造成迭代器失效。erase方法会返回下
一个有效的迭代器,所以当我们要删除某个元素时,需要it=vec.erase(it);。

面试准备每日五题:C++(八)——重写重载隐藏、vector相关相关推荐

  1. 面试准备每日五题:C++(九)——vector、list、deque、priority_queue、mapset

    文章目录 1. 正确释放vector的内存(clear(), swap(), shrink_to_fit()) 2. list的底层原理 3. 什么情况下用vector,什么情况下用list,什么情况 ...

  2. 面试准备每日五题:C++(二)——mallocnew、宏、volatile、constvolatile、(a)和(a)

    文章目录 1.C语言的 malloc 和 C++ 中的 new 有什么区别 2. 写一个 "标准"宏MIN 3. 介绍 volatile 及其作用 4. 一个参数可以既是const ...

  3. 面试准备每日五题:C++(七)——左值右值、面向对象、四种cast转换、拷贝构造函数赋值、虚函数多态

    文章目录 一. 什么是右值引用,跟左值又有什么区别? 二. 面向对象的三大特征 三. c++中四种cast转换 四.拷贝构造函数和赋值运算符的认识 五. 对虚函数和多态的理解 一. 什么是右值引用,跟 ...

  4. 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针

    文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...

  5. 面试准备每日五题:C++(四)——typedefdefine、指针常量、队列栈、地址赋值、C和C++结构体

    文章目录 1. typedef 和define 有什么区别 2. 指针常量与常量指针区别 3. 简述队列和栈的异同 4. 设置地址为0x67a9 的整型变量的值为0xaa66 5.C语言的结构体和C+ ...

  6. 面试准备每日五题:C++(十)——mapset、set查找、迭代器实现、set低层原理

    文章目录 1. 为何map和set的插入删除效率比其他序列容器高,为何map和set每次Insert之后,以前保存的iterator不会失效? 2. 当数据元素增多时(从10000到20000),ma ...

  7. 面试准备每日五题:C++(五)——野指针、句柄指针、newdeletemallocfree、extern、类成员权限

    文章目录 1. 如何避免"野指针" 2. 句柄和指针的区别和联系是什么? 3. new/delete与malloc/free的区别是什么 4. 说一说extern"C&q ...

  8. 面试准备每日五题:C++(三)——全局局部变量、内存分配、strcpysprintfmemcpy、函数指针、引用

    文章目录 1. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 2. 简述C.C++程序编译的内存分配情况 3. 简述strcpy.sprintf 与memcpy 的区别 ...

  9. 面试准备每日五题:C++(一)——变量定义声明、#ifdef #else、结构体赋值、sizeof strlen、C和C++的static

    文章目录 1 变量的声明和定义有什么区别? 2 简述#ifdef.#else.#endif和#ifndef的作用 3 结构体可以直接赋值吗? 4 sizeof 和strlen 的区别 5 C 语言的关 ...

最新文章

  1. [maven] 使用问题及思考汇总
  2. python创建对象的格式为_Python入门基础学习(面向对象)
  3. 比特币现金支持者为网络的未来六个月做准备
  4. Java实用教程笔记 类与对象
  5. numpy生成随机数
  6. 可以删除的android系统自带程序—详细列表【转】
  7. linux-文件的查找-find
  8. C#后台调用oracle存储过程,参数传入的是clob字段,怎样处理
  9. 2020年最好用的手机是哪一款_2020年换手机不用盲目,目前这4部最值得买,好看好用性价比高...
  10. 标志位操作指令七条CLC,STC,CLD,STD,CLI,STI,CMC
  11. 天庭最牛系统 推荐下载_围观RecSys2020 | 推荐系统顶会说了啥?(附论文打包下载)...
  12. EuroLLVM’19 developers’ meeting program
  13. 小程序与H5,APP有什么不同-小程序支付开发1
  14. Utgard连接OPC Server常见故障码及解决方案
  15. 决策树CART、ID3、C4.5原理梳理
  16. Python网络数据爬取及分析-智联招聘
  17. visual studio常用插件
  18. grep的语法和用法
  19. iOS Instruments工具使用
  20. 上班了还能享受带薪长假,真爽啊 外企就是好啊!

热门文章

  1. SQL Server 阻塞原因分析
  2. centos运行C程序
  3. hdu3468 Treasure Hunting 二分匹配
  4. 1434 区间LCM
  5. Smart ORM v0.3发布(完全面向对象的轻量级ORM工具)
  6. MyBatis学习总结_Mybatis查询之resultMap和resultType区别
  7. JavaScript基础知识(三个判断、三个循环)
  8. CentOS下安装Orcale
  9. 【Flask】下载多个文件
  10. Mac SavePanel 保存文件的GUI代码