にペアでイテレータの先頭にアクセスする私は2つのイテレータは、IEがあるペアを持っている:どのようにC++
auto trim = make_pair <std::string::iterator, std::string::iterator>
と私は年末に第一イテレータの先頭を比較しようとしています2番目のイテレータ。
私はこのコード行を思い付いたが、プログラムがコンパイルされませんので、それは正しくないです。
if (begin(trim).first == end(trim).second)
私もこのコード行を試してみましたが、それはまだエラー
if (begin(get<0>(trim)) == end(get<1>(trim)))
を示し
エラー:
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)
^
コンプリート例:
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
イテレータはありませんが開始し、終了します。 –
あなたはこれをやっている理由についてもう少し詳しく知ることができますか?近田はXY問題のように感じます。 –
@NeilButterworth私は残念ですが、ここではC++を初めて使っていましたが、このコード行を書くように教授から指示されました: 'トリムの「開始」(最初の)イテレータが「終了」(2番目)のイテレータをトリムし、 (つまり、続行してください)。だから私は本当に今混乱しています – Suhaib