重轲向量操作符[]-web服务稳定性测试 负载测试 可靠性测试 测试报告

时间:2024-07-30 10:59:00
【文件属性】:

文件名称:重轲向量操作符[]-web服务稳定性测试 负载测试 可靠性测试 测试报告

文件大小:10.35MB

文件格式:PDF

更新时间:2024-07-30 10:59:00

数据结构 邓俊辉 清华大学 mooc学堂在线 教材

§2.5 常规向量 2.5.1 直接引用元素 与数组直接通过下标访问元素的方式(形如“A[i]”)相比,向量ADT所设置的get()和put() 接口都显得不甚自然。毕竟,前一访问方式不仅更为我们所熟悉,同时也更加直观和便捷。那么, 在经过封装之后,对向量元素的访问可否沿用数组的方式呢?答案是肯定的。 解决的方法之一就是重载操作符“[]”,具体实现如代码2.6所示。 1 template T& Vector::operator[](Rank r) const //重载下标操作符 2 { return _elem[r]; } // assert: 0 <= r < _size 代码2.6 重轲向量操作符[] 2.5.2 置乱器  置乱算法 可见,经重载后操作符“[]”返回的是对数组元素的引用,这就意味着它既可以取代get() 操作(通常作为赋值表达式的右值),也可以取代set()操作(通常作为左值)。例如,采用这 种形式,可以简明清晰地描述和实现如代码2.7所示的向量置乱算法。 1 template void permute(Vector& V) { //随机置乱向量,使各元素等概率出现亍殏一位置 2 for (int i = V.size(); i > 0; i--) //自后向前 3 swap(V[i - 1], V[rand() % i]); //V[i - 1]不V[0, i)中某一随机元素交换 4 } 代码2.7 向量整体置乱算法permute() 该算法从待置乱区间的末元素开始,逆序地向前逐一处理各元素。如图2.2(a)所示,对每 一个当前元素V[i - 1],先通过调用rand()函数在[0, i)之间等概率地随机选取一个元素,再 令二者互换位置。注意,这里的交换操作swap(),隐含了三次基于重载操作符“[]”的赋值。 于是如图(b)所示,每经过一步这样的迭代,置乱区间都会向前拓展一个单元。因此经过O(n) 步迭代之后,即实现了整个向量的置乱。 图2.2 向量整体置乱算法permute()癿迭代过秳 在软件测试、仿真模拟等应用中,随机向量的生成都是一项至关重要的基本操作,直接影响 到测试的覆盖面或仿真的真实性。从理论上说,使用这里的算法permute(),不仅可以枚举出同 一向量所有可能的排列,而且能够保证生成各种排列的概率均等(习题[2-6])。


网友评论