You must design and implement classes whose use is similar to the scandir function from a user's perspective, but for a user versed in C++ rather than C. This means that you should use STL vectors instead of C-style arrays, strings instead of C-style strings (0 terminated character arrays), etc. You may implement several classes as part of the implementation of the main class whose interface the user sees as providing equivalent (or better) functionality than scandir. Additionally, you must supply default classes/functions not only for lexicographic ordering of directory entries (see alphasort in the scandir man pages), but also ordering by date-last-modified and by size of entry.
Just as the scandir function supports filtering of file/directory names, your classes must also support filtering. At a minimum, a user of your library must be able to filter names using strings. For extra credit, you can use regular expressions; information about using regular expressions is here.
You must supply online HTML documentation (like man pages) that describes how to use your classes and shows some example code.
You must supply a const iterator that provide access to the entries (in sorted order) that are compiled when a scandir object is "loaded" with directory and file information. You can supply these iterators using makeIterator functions or you can use scandir class typedefs as is done with STL.
You must supply static or shared/dynamic libraries for your scanddir
classes so that users can include your header file, link the library, and
use your scandir classes. You must supply a Makefile that will compile
both libscandir.a or libscandir.so (static and shared
libraries, respectively). Information on creating libraries is here.