⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dirvecfun.cpp

📁 C++&datastructure书籍源码,以前外教提供现在与大家共享
💻 CPP
字号:
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
#include "directory.h"
#include "prompt.h"
#include "tvector.h"

// illustrates templated functions, function objects

// find large files
struct SizePred    // satisfies if DirEntry::Size() >= size
{
    SizePred(int size)
		: mySize(size)
	{}
	bool Satisfies(const DirEntry& de) const
	{
        return de.Size() >= mySize;
	}
	int mySize;
};

// find recent files
struct DatePred    // satisfies if DirEntry::GetDate() >= date
{
  DatePred(const Date& d)
    : myDate(d)
  { }
  bool Satisfies(const DirEntry& de) const
  {
      return !de.IsDir() && de.GetDate() >= myDate;
  }
  Date myDate;
};

void Print(const tvector<DirEntry>& list)
// post: all entries in list printed, one per line
{
    int k;
    DirEntry de;
    for(k=0; k < list.size(); k++)
	{   de = list[k];
        cout << setw(10) << de.Size() << "\t" << setw(12) 
			 << de.Name() << "\t"  << de.GetDate() << endl;
	}
	cout << "---\n# entries = " << list.size() << endl;
};

template <class Iter, class Pred, class Kind>
void IterToVectorIf(Iter& it, const Pred& p, tvector<Kind>& list)
// post: all items in Iter that satisfy Pred are added to list
{
    for(it.Init(); it.HasMore(); it.Next())
    {   if (p.Satisfies(it.Current()))
        {   list.push_back(it.Current());
        }
    }
}

int main()
{
    Date today;
    string dirname = PromptString("directory ");
    int size =       PromptRange("min file size",1,300000);
    int before =     PromptRange("# days before today",0,300);

    DatePred datePred(today-before);  // find files within before days of today
    SizePred sizePred(size);          // find files larger than size   
    DirStream dirs(dirname);          // iterate over directory entries
    tvector<DirEntry> dirvec;         // store satisfying entries here
    
    IterToVectorIf(dirs,datePred,dirvec);
    cout << "date satisfying" << endl << "---" << endl;
	Print(dirvec);
    
    dirvec.resize(0);   // remove old entries
	cout << endl << "size satisfying"<< endl << "---" << endl;
    IterToVectorIf(dirs,sizePred,dirvec);
	Print(dirvec);
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -