标准模板库STL实现文件比较

本文介绍了一种使用标准模板库STL来比较两个大文件内容差异的方法。通过读取文件内容到内存,利用STL容器(如vector)进行比较,找出不同点并存储在第三个容器中,实现了高效且可重用的文件比较组件。主要涉及的函数包括populate_set_from_file、Container_Differences和addElementToSet等。
摘要由CSDN通过智能技术生成
  
问题提出
 现有二篇文章都含有许多行文字。我们要建立一个程序来找出二者之间的不同之处并将这些不同内容的行显示出来。程序必须做成可重复使用的组件,就是说,这个组件能够未经修改地被其他程序使用。

设计
 假设这二个文件非常之大(每个文件都有数千行),我们这样设计有关解决方案:
将各个文件读进内存块,
在内存块中进行文件内容比较,
将不同之处放进一个新的第三个内存块。
 设计方案还要考虑到各个文件的元素位置可能不同,亦即相同的元素不一定在同一行里。这意味着,必须在内存中遍历搜索不相同的术语并将其存放在第三个内存块中。
 考虑到程序的可重用性,我们用类属编程技术来设计,让方案能够适应于存储介质的变化。
 当文件很大时(每个文件有数千行),那么要把每个文件都存储进内存可能是不现实的。另外也给执行过程带来困难。

执行细节
可以用容器来设计,比如用数组或队列,将字符数组存储到容器中。不过这会使得程序的可读性降低并导致组件的可重用性下降。
  本文的解决方案用标准模板库(Standard Template Library, STL)的容器来管理内存块。并且用STL的元素来管理将文件读进内存块。这样的设计方案使得程序具有模板容器级水平的可读性。
 
方案与指南
 我们写的程序是给二部分人看的:最终用户和程序开发人员。写给程序员是因为有人可能对我们的程序作某些更改。他们必须花时间来理解程序。也可能就是自己在以后的时间里要对程序作出修改 - 改善它的可读性而不降低运行效率,或者增加一系列注释。

举例来说,让我们看一下主函数main():
int main(int argc, char* argv[])
{
    //  确认得到正确的参数数量
    if(argc!=3)
    {
        cout << "compareFiles - copyright (c) armman stone 2000" << endl << endl;
        cout << "This program compares the conents of two files and prints" << endl
            << "the differences between the files to the screen" << endl << endl;
        cout << "Usage: compareFiles <file_name_1> <file_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值