在内存中二进制查找与基于磁盘的二进制查找
In memory Binary Search Vs. Disk based Binary Search
在这个程序中,我正在读取"key.pc.db"文件并打印其中间值。
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>
using namespace std;
int main( int argc, char *argv[] )
{
ifstream fp;
int mval;
int sizek;
struct stat filek;
int min, max, mid;
if(stat("key.pc.db", &filek) ==0 )
sizek=filek.st_size;
sizek=sizek/sizeof(int);
min=0;
max=sizek-1;
mid=(min+max)/2;
printf("mid %d ",mid);
fp.open( "key.pc.db", ios::in | ios::binary );
fp.seekg(mid, ios::beg);
fp.read( (char *) &mval, (int) sizeof( int ) );
printf("%d mval ", mval);
getch();
return 1;
}
在这个程序中,我也在读取相同的文件,但我将文件的值存储在数组中,然后打印中间值。两个程序的中间索引显示相同,但值不同。为什么如此?
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>
using namespace std;
int main( int argc, char *argv[] )
{
ifstream fp;
int index;
int sizek;
int kval;
struct stat filek;
int min, max, mid;
int i=0;
if(stat("key.pc.db", &filek) ==0 )
sizek=filek.st_size;
sizek=sizek/sizeof(int);
int k[sizek];
fp.open( "key.pc.db", ios::in | ios::binary );
fp.read( (char *) &kval, (int) sizeof( int ) );
while( !fp.eof() )
{
k[i++]=kval;
fp.read( (char *) &kval, (int) sizeof( int ) );
}
min=0;
max=sizek-1;
mid=(min+max)/2;
printf(" index %d ", mid);
printf(" kmid %d ", k[mid]);
getch();
return 1;
}
在第一种情况下,您正在寻找文件中的错误点。您应该寻找mid*sizeof(int)
而不是mid
。
相关文章:
- 查找"n"二进制字符串中最长公共子字符串的长度
- 无法使用迭代器查找类对象。(二进制 '==': 'userInfo' 不定义此运算符)
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- 查找二进制文件中字节序列的所有匹配项
- 查找二进制文件的大小,函数 tellg() 返回 -1
- 根据现有的标签(而不是二进制图像)查找使用 OpenCV 连接的组件
- 想要查找二进制码字中出现的 1 或 0 的位置
- 查找两个二进制输入 C++ 的 xNOR 位
- 错误:二进制表达式的操作数无效(映射使用查找函数错误)
- 二进制搜索不变以查找元素的首次出现
- 在查找子集中元素和元素数量之间的二进制比较背后的逻辑是什么?
- 使用 std::find 查找从二进制文件中读取的字符并转换为 std::vector 中的 std::string<string> 会产生这种不可预测的行为?
- 使用递归在二进制搜索树中查找固定后继
- 在从通用树转换的二进制树中查找节点的父
- C++二进制搜索无法正常工作-查找不在数组中的元素
- 写入二进制文件的中间;使用tellg()查找长度
- 递归地查找二进制树中的最小数
- OpenCV:查找二进制 Mat 图像的所有非零坐标
- 查找二进制值
- 查找二进制到C/ c++链接