- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我的程序,它应该创建一个对象数组,然后告诉。每个循环需要多长时间运行。循环只是从文件和内存读取/写入,程序应该在完成时比较这些方法。出于某种原因,如果创建的记录数为 16 或更少,程序将只显示时间。我似乎不明白为什么。我也不明白为什么我的比率不起作用。可能因为每个变量都不到一秒,所以它可能试图将 0 除以 0?
#include <iostream>
#include <fstream>
#include <string>
#include <ctime>
#include <iomanip>
using namespace std;
class TestRecord
{
private:
int _number;
string _data;
public:
TestRecord ()
{_number = 0; _data = "no data";}
TestRecord (int number, string data)
{_number = number; _data = data;}
void setNumber (int number)
{_number = number;}
void setData (string data)
{_data = data;}
int getNumber() const
{return _number;}
string getData() const
{return _data;}
friend ostream &operator <<(ostream &out, TestRecord &records)
{
out << records._number << " " << records._data;
return out;
}
};
int main ()
{
string string256 = "AaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronAaronA";
int recordsToBeCreated = 0;
cout << " How many records should be created?" << endl;
cin >> recordsToBeCreated;
TestRecord* recordObj = new TestRecord[recordsToBeCreated];
//--------------------------------------writing
clock_t startTime1 = clock();
for (int count = 0; count < recordsToBeCreated; count++) //fill object array
{
srand(count);
recordObj[count].setData(string256);
recordObj[count].setNumber(rand()% 10000 + 1000);
}
clock_t endTime1 = clock();
ofstream outFile;
clock_t startTime2 = clock();
for (int count1 = 0; count1 < recordsToBeCreated; count1++) //write to disk
{
outFile.open("data.txt");
outFile << recordObj[count1] << endl;
}
clock_t endTime2 = clock();
outFile.close();
//----------------------------------------reading
clock_t startTime3 = clock();
for(int count2 = 0; count2 < recordsToBeCreated; count2++) //read/write from mem
{
int *tempNumber = new int;
string *tempString = new string;
*tempNumber = recordObj[count2].getNumber();
*tempString = recordObj[count2].getData();
delete tempNumber;
delete tempString;
}
clock_t endTime3 = clock();
ifstream inFile;
clock_t startTime4 = clock();
for(int count3 = 0; count3 < recordsToBeCreated; count3++) //read/write from disk
{
int *tempNumber = new int;
string *tempString = new string;
inFile.open("data.txt");
inFile >> *tempNumber;
inFile >> *tempString;
delete tempNumber;
delete tempString;
}
clock_t endTime4 = clock();
inFile.close();
//---------------------------------random reading comp
int randomNumber = rand()%recordsToBeCreated;
clock_t startTime5 = clock(); //traverse array to random index
for(int count4 = 0; count4 > randomNumber; count4++)
{
recordObj[count4];
}
clock_t endTime5 = clock();
clock_t startTime6 = clock();
inFile.open("data.txt");
for(int count5 = 0; count5 < randomNumber; count5++)
{
string *tempString = new string;
cin.ignore();
inFile >> *tempString;
}
clock_t endTime6 = clock();
inFile.close();
double seconds1 = endTime1 - startTime1;
seconds1 = seconds1 / CLOCKS_PER_SEC;
double seconds2 = endTime2 - startTime2;
seconds2 = seconds2 / CLOCKS_PER_SEC;
double seconds3 = endTime3 - startTime3;
seconds3 = seconds3 / CLOCKS_PER_SEC;
double seconds4 = endTime4 - startTime4;
seconds4 = seconds4 / CLOCKS_PER_SEC;
double seconds5 = endTime5 - startTime5;
seconds5 = seconds5 / CLOCKS_PER_SEC;
double seconds6 = endTime6 - startTime6;
seconds6 = seconds6 / CLOCKS_PER_SEC;
cout << "Time to write to memory: " << fixed << setprecision (5) << seconds1 << " seconds" << endl;
cout << "Time to write to file: " << setprecision (5) << seconds2 << " seconds" << endl;
cout << "Ratio of (write to disk)/(write to memory): " << seconds2/seconds1 << endl;
cout << "\n\n";
cout << "Runtime to read from memory: " << setprecision (5) << seconds3 << " seconds" << endl;
cout << "Runtime to read from disk: " << setprecision (5) << seconds4 << " seconds" << endl;
cout << "Ratio of (read from disk)/(read from memory): " << seconds4/seconds3 << endl;
cout << "\n\n";
cout << "Runtime to find random index from memory: " << setprecision (5) << seconds5 << " seconds" << endl;
cout << "Runtime to find random line from disk: " << setprecision (5) << seconds6 << " seconds" << endl;
cout << "Ratio of (read from disk)/(read from memory): " << seconds6/seconds5 << endl;
delete [] recordObj;
system("pause");
return 0;
最佳答案
编辑:
这一行
for(int count4 = 0; count4 > randomNumber; count4++)
很危险。你不会进入无限循环只是因为 count4
环绕 2^32-1
迟早,但这是一个糟糕的条件。不应该是count 4 < randomNumber
吗? ?
编辑2:
tempInt/tempString 的分配只能进行一次(在循环之前),而不是在循环本身。
旧东西:
第一个(相当明显的)建议:停止动态分配所有内容。
代替
for(int count2 = 0; count2 < recordsToBeCreated; count2++) //read/write from mem
{
int *tempNumber = new int;
string *tempString = new string;
*tempNumber = recordObj[count2].getNumber();
*tempString = recordObj[count2].getData();
delete tempNumber;
delete tempString;
}
只做
for(int count2 = 0; count2 < recordsToBeCreated; count2++) //read/write from mem
{
int tempNumber;
string tempString;
tempNumber = recordObj[count2].getNumber();
tempString = recordObj[count2].getData();
}
如您所知,tempNumber
和 tempString
将在堆栈上分配,并在每次迭代结束时释放。
现在是错误。
在这个循环中
for (int count1 = 0; count1 < recordsToBeCreated; count1++)
{
outFile.open("data.txt");
outFile << recordObj[count1] << endl;
}
您在每次迭代时覆盖文件。我想这应该是
outFile.open("data.txt");
// write 'em all
for (int count1 = 0; count1 < recordsToBeCreated; count1++)
{
outFile << recordObj[count1] << endl;
}
在这个循环中
for(int count3 = 0; count3 < recordsToBeCreated; count3++) //read/write from disk
{
int *tempNumber = new int;
string *tempString = new string;
inFile.open("data.txt");
inFile >> *tempNumber;
inFile >> *tempString;
delete tempNumber;
delete tempString;
}
您再次打开“data.txt”,因此您只阅读了第一行。
这应该是(删除了分配)
inFile.open("data.txt");
for(int count3 = 0; count3 < recordsToBeCreated; count3++) //read/write from disk
{
int tempNumber;
string tempString;
inFile >> tempNumber;
inFile >> tempString;
}
关于c++ - 为什么我的程序最多只能编译 16 条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12485398/
看来我又被一个简单的正则表达式卡住了。 我想要什么: 1 到 999 之间的数字 可选:逗号、符号 如果输入逗号,最少1位小数,最多3位小数点应该是presebt。 Allowed: 100 999,
我需要从两列中获取最大值并将其发送到第三列。这些列的大小都是统一的,但有时大小会有所不同,但它们都将从同一个单元格开始。例如: 5 8 - 6 2 - 6 5 - 带有破折号的列需要找到其他两个之间的
我在我的网站上有一张包含用户排名列的表格,排名是一个数字,我想选择排名最高的 3 个用户,所以我查看并搜索了我认为最好的查询是那:Link (正确答案的第二个查询),但我不明白查询,如果有人能一步一步
我正在尝试制作一个点击计数器,我想收集 24 小时内的总点击次数。无论最终用户位于哪个时区,这 24 小时都应该是固定值。在 24 小时内,数据库应更新为 +1 次点击计数,一旦达到 24 小时时间范
我有一个在典型共享主机上运行的 PHP + MySQL Web 应用程序,我想知道调用最多的查询是什么以及消耗的资源量是多少。这样,我将专注于最昂贵的查询以优化资源或检测优化不佳的查询。 例如: qu
这是我“尝试”从用户输入的数字中找到最大 2 个值的代码: #include using namespace std; void maximum2(int a, int& max1,int& max
我需要编写一个 Python 函数,从具有最多“o”字符的字符串中返回单词。例如,get_most_ooo_word(['aa ao ooo']) 应该返回 ['ooo'] 和 get_most_oo
我正在寻找一种哈希算法,以创建尽可能接近字符串的唯一哈希值 (max len = 255),从而生成一个长整数 (DWORD)。 我意识到26^255 >> 2^32,但也知道英语的单词数远少于2^3
我得到了一个仅由 's','t','u','v' 作为字符组成的字符串 T。我想找到长度为 |T| 的字符串数它最多与 T 不同 n 个位置。而且每个这样的字符串在三个不同的位置不能有相同的字符,这些
我有一群“专家”(大约 300 人)可以胜任一项工作。而且我有很多工作必须完成,比如说大约 500 个。我也有信息,一个专家能做某项工作有多“好”。这将导致一个 300 x 500 的矩阵来保存权重。
我正在尝试解决这个问题,虽然我可以使用蛮力解决它,但是以下优化算法为我提供了一些测试用例的错误结果。我尝试了但无法找到代码的问题,任何人都可以帮助我。 问题:给定一个字符串 S 和整数 K,找到整数
我需要一个混合长度的正则表达式验证,总长度为 6 个字符,其中 4-6 个大写/数字字符和 0-2 个空格。 我试过 ^[A-Z0-9]{4,6}+[\s]{0,2}$ 但它导致最大长度为 8 个字符
我有一个数组 {-1,2,3,4,-3,-2,1,5} 现在我想找到给定数组的最小连续总和子数组,最多 K 次交换。 在上面的数组中,最小连续和是-5,子数组是{-3,-2} 对于 K=1 我应该如何
我们有一个简单的表格如下: ------------------------------------------------------------------------ | Name |
如果哈希不能超过 4 个字符,并且这 4 个字符只能是小写字母或数字,那么创建 String 哈希的最佳方法是什么? 我要散列的字符串有 1-255 个字符。我知道在没有冲突的情况下创建 4-char
我希望使用 Multipeer Connectivity 框架,并感谢任何关于如何最好地进行的经验之谈。 我需要在“教练”设备和最多 45 个“玩家”设备之间建立连接。他们都在同一个空间,但无法预测
给定一个数组 a,什么是实现其组合直到第 n 的最佳方法?例如: a = %i[a b c] n = 2 # Expected => [[], [:a], [:b], [:c], [:a, b], [
这个问题在这里已经有了答案: Formatting floats without trailing zeros (21 个回答) 关闭8年前。 我想格式化最多包含 2 个小数位的 float 列表。但
我无法使用以下形式的命令登录到远程 docker 注册表: docker login –u my-username –p my-password registry.myclient.com 我得到的错
所以这是我的代码:服务器.java import java.io.*; import java.net.*; import java.util.*; class Server implements R
我是一名优秀的程序员,十分优秀!