使用c++随机生成100个时间窗口,时间窗口最短为5分钟,最长为2小时,将生成的时间窗口保存在文件中,从文件中读取时间窗口的开始时间和结束时间,取开始时间和结束时间的中值,并将结果按照中值从小到大的顺序排列。不要使用系统时间
时间: 2024-02-18 17:03:48 浏览: 51
mfc_win.rar_vs2003_弹出窗_弹出窗口_显示时间_静态库
以下是一个示例代码,可以生成100个随机时间窗口并保存到文件中,并从文件中读取时间窗口的开始时间和结束时间,计算出中值并按照中值从小到大的顺序排列:
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <random>
#include <chrono>
using namespace std;
// 生成随机时间窗口
vector<pair<int, int>> generateWindows(int n, int minSize, int maxSize) {
vector<pair<int, int>> windows;
default_random_engine generator(chrono::system_clock::now().time_since_epoch().count());
uniform_int_distribution<int> sizeDist(minSize, maxSize);
uniform_int_distribution<int> startDist(0, 24*60-1);
for (int i = 0; i < n; i++) {
int size = sizeDist(generator);
int start = startDist(generator);
int end = start + size;
if (end >= 24*60) {
start -= (end - 24*60);
end = 24*60 - 1;
}
windows.emplace_back(start, end);
}
return windows;
}
// 将时间窗口保存到文件中
void saveWindowsToFile(const vector<pair<int, int>>& windows, const string& filename) {
ofstream out(filename);
for (auto& window : windows) {
out << window.first << " " << window.second << endl;
}
out.close();
}
// 从文件中读取时间窗口并计算中值
vector<pair<int, int>> calculateMedian(const string& filename) {
vector<pair<int, int>> windows;
ifstream in(filename);
int start, end;
while (in >> start >> end) {
int mid = (start + end) / 2;
windows.emplace_back(mid, mid);
}
in.close();
sort(windows.begin(), windows.end());
return windows;
}
int main() {
vector<pair<int, int>> windows = generateWindows(100, 5, 2*60);
saveWindowsToFile(windows, "windows.txt");
vector<pair<int, int>> medians = calculateMedian("windows.txt");
for (auto& median : medians) {
cout << "中值:" << median.first << "-" << median.second << endl;
}
return 0;
}
```
上述代码中,我们使用default_random_engine来生成随机数,其中种子使用了当前时间的微秒数。使用uniform_int_distribution来生成时间窗口的长度和起始时间。然后将生成的时间窗口保存到文件中。在calculateMedian函数中,我们从文件中读取时间窗口的起始时间和结束时间,计算出中值并保存到一个新的vector中。最后,我们使用sort函数按照中值从小到大的顺序排序并输出结果。
阅读全文