gpt4 book ai didi

c++ - 以有效的方式逐字节比较数据(使用 C++)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:15 24 4
gpt4 key购买 nike

有没有比使用比较更有效的字节比较数据的方法C++ 列表容器的运算符?

我要比较【大? 10 kByte < size < 500 kByte] 按字节计算的数据量,以验证外部存储设备的完整性。

因此我按字节读取文件并将值存储在无符号字符列表中。此列表的资源由 shared_ptr 处理, 这样我就可以在程序中传递它而无需担心列表的大小

typedef boost::shared_ptr< list< unsigned char > > = contentPtr;
namespace boost::filesystem = fs;

contentPtr GetContent( fs::path filePath ){
contentPtr actualContent (new list< unsigned char > );
// Read the file with a stream, put read values into actual content
return actualContent;

这要完成两次,因为文件总是有两个拷贝。必须比较这两个文件的内容,如果发现不匹配则抛出异常

void CompareContent() throw( NotMatchingException() ){
// this part is very fast, below 50ms
contentPtr contentA = GetContent("/fileA");
contentPtr contentB = GetContent("/fileB");
// the next part takes about 2secs with a file size of ~64kByte
if( *contentA != *contentB )
throw( NotMatchingException() );
}

我的问题是:
随着文件大小的增加,列表的比较变得非常慢。使用大约 100 kByte 的文件大小,比较内容最多需要两秒钟。随着文件大小的增加和减少....

有没有更有效的方法来进行这种比较?是用过的容器的问题吗?

最佳答案

不要使用 std::list 使用 std::vector

std::list 是一个链表,不保证元素是连续存储的。

std::vector 另一方面似乎更适合指定的任务(存储连续字节和比较大块数据)。

如果你需要多次比较多个文件并且不关心差异在哪里,你也可以计算每个文件的哈希值并比较哈希值。这样会更快。

关于c++ - 以有效的方式逐字节比较数据(使用 C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com