ich ein Paar haben, das 2 Iteratoren hat also:Wie in den Beginn eines Iterators in einem Paar für den Zugriff auf C++
auto trim = make_pair <std::string::iterator, std::string::iterator>
und ich versuche, den Anfang des ersten Iterator mit Ende des vergleichen 2. Iterator.
Ich kam mit dieser Codezeile, aber es ist nicht richtig, weil das Programm nicht kompilieren:
if (begin(trim).first == end(trim).second)
Ich habe auch versucht, diese Codezeile, aber es zeigt immer noch Fehler
if (begin(get<0>(trim)) == end(get<1>(trim)))
Der Fehler:
error: no matching function for call to ‘begin(std::pair<__gnu_cxx::__normal_iterator >, __gnu_cxx::__normal_iterator > >&)’
if (begin(trim).first == end(trim).second)
^
Komplettes Beispiel:
auto func(std::string& str, TrimPredicate p) ->
std::pair<
std::string::iterator, // typedef to string iterator type
std::string::iterator // typedef to string iterator type
>
{
// Do stuff and return them as below
return std::make_pair(first_non_ws_iter, last_non_ws_iter);
}
auto func2()-> std::pair<bool, string> {
auto trimmed_range = func(
line,
[loc](auto char_var)
{
return isspace(char_var, loc);
}
);
if (begin(trimmed_range).first == end(trimmed_range).second)
//do something
Iteratoren haben nicht beginnt und endet. –
Kannst du ein wenig mehr darüber erzählen, warum du das machst, vielleicht mit einem kurzen vollständigen Beispiel? Kinda fühlt sich an wie ein XY-Problem. –
@NeilButterworth Es tut mir leid, neu in C++ hier, aber der Prof hat uns gebeten, diese Codezeile zu schreiben: 'Wenn der Trim" begin "(erster) Iterator ist gleich Trim" Ende "(zweiter) Iterator, dann loop (ie, weiter) .' So bin ich jetzt wirklich verwirrt – Suhaib