Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在find_if中使用正向和反向迭代器有什么区别_C++_Stl - Fatal编程技术网

C++ 在find_if中使用正向和反向迭代器有什么区别

C++ 在find_if中使用正向和反向迭代器有什么区别,c++,stl,C++,Stl,我有两个函数(一本书中的示例): 为什么在使用反向迭代器的函数trim\u right中我需要使用base(),而在使用正向迭代器的函数trim\u left中我不需要它?反向迭代器是常规迭代器上的适配器。和erase重载只接受常规、非反向、iterator和const\u iterator。reverse\u it.base()所做的是在reverse\u迭代器中打开适应的迭代器。因此,这是一种从reverse\u iterator或const\u iterator从const\u rever

我有两个函数(一本书中的示例):


为什么在使用反向迭代器的函数
trim\u right
中我需要使用
base()
,而在使用正向迭代器的函数
trim\u left
中我不需要它?

反向迭代器是常规迭代器上的适配器。和
erase
重载只接受常规、非反向、
iterator
const\u iterator
reverse\u it.base()
所做的是在
reverse\u迭代器
中打开适应的迭代器。因此,这是一种从
reverse\u iterator
const\u iterator
const\u reverse\u iterator
获取
迭代器的方法,因为
string
s
erase()
具有接受
迭代器的重载(从C++11开始)
const\u迭代器
,不适用于
反向迭代器
常量反向迭代器
。反向迭代器是根据“底层”迭代器实现的,其
base()
成员允许访问该底层迭代器(例如,从
反向迭代器
获取相应的
迭代器
)。
std::string trim_right(std::string s)
{
    s.erase(std::find_if(s.rbegin(), s.rend(), isalpha).base(),s.end() );

    return s;
} 
std::string trim_left(std::string s)
{
    s.erase(s.begin(),
        std::find_if(s.begin(), s.end(), isalpha));
    return s;
}