Pisałem kilka funkcji z prototypem takiego:Co jest nie tak z przekazywaniem iteratora C++ przez odwołanie?
template <typename input_iterator>
int parse_integer(input_iterator &begin, input_iterator end);
Chodzi o to, że rozmówca dostarczy szereg znaków, a funkcja będzie interpretować znaki jako wartość całkowitą i zwraca go, pozostawiając początek z przeszłości obok ostatnio używanej postaci. Na przykład:
std::string sample_text("123 foo bar");
std::string::const_iterator p(sample_text.begin());
std::string::const_iterator end(sample_text.end());
int i = parse_integer(p, end);
To pozostawi i
zestaw do 123 i p
"wskazującym" na przestrzeń przed foo
.
Od tego czasu powiedziano mi (bez wyjaśnienia), że przekazywanie iteratora przez podanie jest złym pomysłem. Czy to zła forma? Jeśli tak, dlaczego?
"Nie będzie można po prostu wstawić iteratora przez coś innego lub wygenerowanego jak v.begin(), ponieważ będą to tymczasowe." Do tego przeznaczone są wartości rvalue w C++ 0x. :) – Zifre
Podobał mi się pomysł iteratora wyjściowego jest bardzo stl-esque – iain
Inna alternatywa (dla późnych czytelników): zwracanie :: std :: pair, analogicznie jak :: std :: map :: insert does . –
Aconcagua