【发布时间】:2017-02-05 19:47:08
【问题描述】:
我有一对有 2 个迭代器,即:
auto trim = make_pair <std::string::iterator, std::string::iterator>
我正在尝试将第一个迭代器的开头与第二个迭代器的结尾进行比较。
我想出了这行代码,但它不正确,因为程序无法编译:
if (begin(trim).first == end(trim).second)
我也试过这行代码,但还是报错
if (begin(get<0>(trim)) == end(get<1>(trim)))
错误:
错误:没有匹配的调用函数 '开始(std::pair<:__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++ 新手,但是教授要求我们写这行代码:
if the trim's "begin" (first) iterator is equal to trims "end" (second) iterator, then loop (i.e., continue).所以我现在真的很困惑 -
@RetiredNinja,我会更新问题
-
所以你会想要这样的东西:
if (trim.first == trim.second)