相对于数组,在链表中添加和删除元素更容易,但排序速度更慢。这就引出了一种可能性:相对于使用链表算法进行排序,将链表复制到数组中,对数组进行排序,再将排序后的结果复制到链表中的速度可能更快;但这也可能占用更多的内存。请使用如下方法检验上述假设。
a.创建大型vector<int>对象vi0,并使用rand( )给它提供初始值。
b.创建vector<int>对象vi和list<int>对象li,它们的长度都和初始值与vi0相同。
c.计算使用STL算法sort( )对vi进行排序所需的时间,再计算使用list的方法sort( )对li进行排序所需的时间。
d.将li重置为排序的vi0的内容,并计算执行如下操作所需的时间:将li的内容复制到vi中,对vi进行排序,并将结果复制到li中。
要计算这些操作所需的时间,可使用ctime库中的clock( )。
这种测试并非绝对可靠,因为结果取决于很多因素,如可用内存量、是否支持多处理以及数组(列表)的长度(随着要排序的元素数增加,数组相对于列表的效率将更明显)。另外,如果编译器提供了默认生成方式和发布生成方式,请使用发布生成方式。鉴于当今计算机的速度非常快,要获得有意义的结果,可能需要使用尽可能大的数组。例如,可尝试包含100000、1000000和10000000个元素。
main.cpp:
#include <iostream>
#include <list>
#include <vector>
#include <ctime>
using namespace std;
const int SIZE = 1000000;
int main() {
vector<int> vi0(SIZE, 0);
srand(time(0));
for (int i = 0; i < SIZE; ++i) {
vi0.at(i) = rand();
}
vector<int> vi(vi0);
list<int> li(SIZE, 0);
copy(vi0.begin(), vi0.end(), li.begin());
clock_t start = clock();
sort(vi.begin(), vi.end());
clock_t end = clock();
cout << "sort vector time:" << (double)(end - start) / CLOCKS_PER_SEC << endl;
start = clock();
li.sort();
end = clock();
cout << "sort list time:" << (double)(end - start) / CLOCKS_PER_SEC << endl;
copy(vi0.begin(), vi0.end(), li.begin());
start = clock();
copy(vi.begin(), vi.end(), li.begin());
sort(vi.begin(), vi.end());
copy(vi.begin(), vi.end(), li.begin());
end = clock();
cout << "sort copy time:" << (double)(end - start) / CLOCKS_PER_SEC << endl;
return 0;
}
分类:
C++基础第一卷
« 上一篇: 【C++】编写一个具有老式风格接口的函数,其原型如下:int reduce(long arr[], int n)。实参应是数组名和数组中的元素个数。该函数对数组进行排序,删除重复的值,返回缩减后数组中的元素数目。请使用STL函数编写该函数(如果决定使用通用的unique( )函数,请注意它将返回结果区间的结尾)。使用一个小程序测试该函数。
» 下一篇: 【C++】Mat和Pat希望邀请他们的朋友来参加派对。他们要编写一个程序完成下面的任务。 让Mat输入他朋友的姓名列表。姓名存储在一个容器中,然后按排列后的顺序显示出来。 让Pat输入她朋友的姓名列表。姓名存储在另一个容器中,然后按排列后的顺序显示出来。 创建第三个容器,将两个列表合并,删除重复的部分,并显示这个容器的内容。
» 下一篇: 【C++】Mat和Pat希望邀请他们的朋友来参加派对。他们要编写一个程序完成下面的任务。 让Mat输入他朋友的姓名列表。姓名存储在一个容器中,然后按排列后的顺序显示出来。 让Pat输入她朋友的姓名列表。姓名存储在另一个容器中,然后按排列后的顺序显示出来。 创建第三个容器,将两个列表合并,删除重复的部分,并显示这个容器的内容。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探