Hmm ... Credevo di aver capito regex, e ho pensato ho capito iteratori, ma l'attuazione regex C++ 11 di me ha lasciato perplessi ...C++ 11 regex_token_iterator
Un settore che non capisco: leggere su regex token iterators, mi sono imbattuto nel seguente codice di esempio:
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iterator>
#include <regex>
int main()
{
std::string text = "Quick brown fox.";
// tokenization (non-matched fragments)
// Note that regex is matched only two times: when the third value is obtained
// the iterator is a suffix iterator.
std::regex ws_re("\\s+"); // whitespace
std::copy(std::sregex_token_iterator(text.begin(), text.end(), ws_re, -1),
std::sregex_token_iterator(),
std::ostream_iterator<std::string>(std::cout, "\n"));
...
}
non capisco come il seguente output:
Quick
brown
fox.
viene creato dal std :: copy() functio n sopra. Non vedo loop, quindi sono perplesso su come si sta verificando l'iterazione. In altre parole, come viene generato più di una riga di output?
Copia ciascuno nell'output. Il ciclo è all'interno di 'copia'. – chris