【发布时间】:2021-08-30 05:50:26
【问题描述】:
我必须测量将 100000 个 int 类型的数字添加到不同类型的容器中需要多少时间。所以有 standard、vector、list - 这些都是正确完成的。而且我在执行 map 和 multimap 时遇到了问题,然后我必须测量删除每个容器的所有这些元素所需的时间。有什么线索吗?
每个容器必须容纳 100000 个 int 类型编号。
- 创建堆栈容器 (s1)。测量向其中添加 100000 个数字需要多少时间。
- 创建一个堆栈容器 (s2),它将像矢量容器一样管理内存。测量向其中添加 100000 个数字需要多少时间。
- 创建一个堆栈容器 (s3),它将像列表容器一样管理内存。测量向其中添加 100000 个数字需要多少时间。
- 创建一个堆栈容器 (s2),它将像地图容器一样管理内存。测量向其中添加 100000 个数字需要多少时间。
- 创建一个堆栈容器 (s2),它将像多映射容器一样管理内存。测量添加100000需要多少时间 给它编号。
- 测量删除所有容器的元素所需的时间。
附加信息:
- 使用标准 C++ 计时方法。可以这样计算时间:
clock_t begin = clock(); //instructions clock_t end = clock(); double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; cout << elapsed_secs <<endl;
- 使用两种类型的自己的堆栈实现:
- 未优化(正常工作且未定向以减少耗时的操作)
- 优化(正常工作,但也旨在减少耗时的操作)
也是基于标准栈类的实现。
#include <iostream>
#include <stack>
#include <vector>
#include <list>
#include <map>
using namespace std;
template <class T>
void timeTest(T s)
{
clock_t begin = clock();
for (int i = 0; i < 100000; i++) { s.push(i); }
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << elapsed_secs << endl;
}
/*
template <class T, class S>
void timeTest(stack <int, map <int, int>> s)
{
clock_t begin = clock();
for (int i = 0; i < 100000; i++) { s.emplace(i, i); }
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << elapsed_secs << endl;
}
template <class T, class S>
void timeTest(stack <pair <int, int>, multimap <int, int>> s)
{
clock_t begin = clock();
for (int i = 0; i < 100000; i++) { s.emplace(i, i); }
clock_t end = clock();
double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
cout << elapsed_secs << endl;
}
*/
int main()
{
stack <int> s1;
stack <int, vector <int>> s2;
stack <int, list <int>> s3;
//stack <int, map <int, int>> s4;
//stack<pair<int, int>, multimap<int, int>> s5;
timeTest(s1);
timeTest(s2);
timeTest(s3);
//timeTest(s4);
//timeTest(s5);
}
【问题讨论】:
-
你有什么问题??
-
之前有人问过同样的问题:stackoverflow.com/questions/67963760/…
-
评论部分 (4.) - 我必须在地图中放置 100000 个元素并测量时间
-
std::map不满足stack的要求... 为什么要使用stack适配器进行测试? -
“我必须写一些代码作为我的作业”不是问题。请尝试解释您已经尝试过的内容、失败的原因以及缺少的内容。
标签: c++ templates memory-management stack multimap