C++ & STL: Reading a text file into a collection with little code





2.00/5 (1 vote)
How to use istream_iterator and the copy algorithm to populate an STL collection from a text file with very little code
There is a simple function I wrote to populate an STL list with the elements in a text file. The two parameters are the filename and the list to populate. This is a template function, so it will support lists of any type of element. If you want to use a different STL collection, you can change the code from using a list to your preferred collection type. I wrote this function to clear the collection before reading the file.
The function requires the following headers and uses the following:
#include <algorithm> #include <iostream> #include <fstream> #include <iterator> using std::ifstream; using std::istringstream; using std::list; using std::for_each; using std::istream_iterator; using std::back_insert_iterator;Following is the actual function. The remarkable thing about the STL is its power, and this is one example: With istream_iterator and the std::copy() function, reading the file & populating the collection can be done with very little code (practically one line).
template <class T> void ReadDataFile(const char* pFilename, list<T>& pDataList) { pDataList.clear(); ifstream inFile(pFilename, std::ios::in); if (inFile.good()) { std::copy(istream_iterator<T>(inFile), istream_iterator<T>(), back_insert_iterator<list<T> >(pDataList)); inFile.close(); } }