// 4-多机调度问题.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; // 作业的处理时间t,m台计算机 void schedule(vector<int>& t, int m); int main() { vector<int> t{ 2,14,4,16,6,5,3 }; cout << "作业时长依次为:"; copy(t.begin(), t.end(), ostream_iterator<int>(cout, " ")); cout << endl; schedule(t, 3); } void schedule(vector<int>& t, int m) { priority_queue<int> q; // 默认是大根堆,从大到小排序 for (int n : t)q.push(n); vector<vector<int>> jobSeq(m); // m个作业序列,来表示m台计算机调度的过程 vector<int> totalTime(m, 0); // 记录m台机器的作业时长 while (!q.empty()) { int curWork = q.top(); // 取出作业序列中最长的 q.pop(); int posMin = distance(totalTime.begin(), min_element(totalTime.begin(), totalTime.end())); // 当前时长最短的机器序号 jobSeq[posMin].push_back(curWork); totalTime[posMin] += curWork; } for (int i = 0; i < m; ++i) { cout << "第" << i + 1 << "台机器:"; copy(jobSeq[i].begin(), jobSeq[i].end(), ostream_iterator<int>(cout, " ")); cout << endl; } cout << "总时长:" << *max_element(totalTime.begin(), totalTime.end()) << endl; }请你在上述代码中,用到了那些STL的容器和函数,请你查阅这些容器和函数的基本实现原理,并描述具体是如何使用的。
时间: 2024-04-02 12:37:22 浏览: 137
在上述代码中,使用了以下STL容器和函数:
1. vector:可变长数组,用于存储作业时长和每个机器的作业序列。
2. priority_queue:优先队列,用于按照作业时长从大到小排序。
3. min_element:返回序列中的最小元素的迭代器,用于找到当前时长最短的机器序号。
4. copy:将一个序列复制到另一个序列中。
5. ostream_iterator:输出流迭代器,用于将序列中的元素输出到输出流中。
具体使用方法如下:
1. 创建vector容器,并使用push_back函数将元素添加到末尾。
2. 创建priority_queue容器,并使用push函数将元素添加到队列中。
3. 使用min_element函数找到序列中的最小值,并使用distance函数计算其在序列中的位置。
4. 使用copy函数将序列中的元素复制到另一个序列中。
5. 使用ostream_iterator将序列中的元素输出到输出流中。
阅读全文