Created
November 28, 2020 16:33
-
-
Save lancetw/83951da1c6177646b222e57b0efeef16 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ref: https://gitlab.com/manning-fpcpp-book/code-examples/-/blob/master/chapter-01/count-lines-transform/main.cpp | |
#include <iostream> | |
#include <string> | |
#include <vector> | |
#include <unordered_map> | |
#include <fstream> | |
#include <algorithm> | |
#include <iterator> | |
#include <ranges> | |
using namespace std::ranges; | |
/** | |
* This function opens a file specified by the filename argument, | |
* and counts the number of lines in said file | |
*/ | |
int count_lines(const std::string &filename) | |
{ | |
std::ifstream in(filename); | |
// We are creating an iterator over the input stream and | |
// passing it to the count algorithm to count the number | |
// of newline characters | |
return std::count( | |
std::istream_iterator<char>(in >> std::noskipws), | |
std::istream_iterator<char>(), | |
'\n'); | |
} | |
/** | |
* 2020 ver. | |
*/ | |
auto count_lines_in_files(const std::vector<std::string>& files) | |
{ | |
return files | views::transform(count_lines); | |
} | |
int main(void) | |
{ | |
auto results = count_lines_in_files({"main.cpp", "Makefile"}); | |
for (const auto &result: results) { | |
std::cout << result << " line(s)\n"; | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment