25、C++ 容器效率、模板与虚函数详解

C++ 容器效率、模板与虚函数详解

1. Vector 成员函数效率分析

在编程中,我们常常需要考虑不同操作的时间效率,对于 Vector 容器的成员函数也是如此。下面以当前数组大小为 N 来分析一些函数的效率:
| 函数 | 效率(时间要求) |
| ---- | ---- |
| size | O(1) |
| operator[] | O(1) |
| operator= | O(N) |
| 拷贝构造函数 | O(N) |
| push_back | O(N) |

从表格可以看出,如果要对整个向量进行操作,所需时间为 O(N);如果只是对单个元素进行操作,所需时间为 O(1),但 push_back 除外,它需要 O(N) 的时间,因为要将旧内容复制到新的内存块中。

以下是一些相关练习:
1. 求 print 函数在 O 表示法下的时间要求。
2. 编写 pop_back 函数,并确定其时间要求,如果不是 O(1),则说明做了过多的工作。
3. 重写 push_back 函数,使其在添加新元素时,不是每次都重新分配内存,而是每添加十个元素分配一次足够的内存。判断这样是否会改变时间成本,并思考是否值得这样做。
4. 编写一个 Queue 类,它类似于 Stack,但从添加元素的相反端取出元素,即先进先出。确定 enqueue 和 dequeue 在 O 表示法下的时间。

2. 将 Vector 转换为模板类

为了让 Vector 能够存储不同类型的数据,我们可以将其转换为模板类。具体操作步骤如下:
1.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值