编程珠玑第一篇的一个问题
第一篇中的问题:给n个不相重复的数进行排序,(n<10^7) 用的方法是位图的方法。但是我的程序运行的时候,我通过任务管理器看到的内存使用是10M左右,和理论分析的1.25M差的也太多了。求大神指教。下面是我的程序
- C/C++ code
#include <iostream>#include <fstream>using namespace std;const int n = 10000000;bool a[n] = {false};int main(){ ifstream inFile("data.txt",ios::in); int k; inFile >> k; int i; int t; for (i = 0;i < k;i++) { inFile >> t; a[t] = true; } inFile.close(); ofstream outFile("result.txt",ios::out); outFile << k << endl; for (i = 0;i < n;i++) if (a[i]) outFile << i << "\t"; outFile.close(); return 0;}
[解决办法]
位图,顾名思义,用位来表示
bool虽然有效位只有1位,但它依然占用1字节,1字节=8位
所以1.25*8=10
[解决办法]
在C++里,bool占用1字节,八位
想实现位图,请自行用int、使用位操作来做