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

问题描述 投票:2回答:1
我有两个功能(从书中得到一个例子):

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; }

为什么在具有反向迭代器的函数trim_right中我需要使用base(),但是在具有正向迭代器的trim_left中我不需要它?

我有两个函数(从书中得到一个例子):std :: string trim_right(std :: string s){s.erase(std :: find_if(s.rbegin(),s.rend(),isalpha) .base(),s.end());返回s; } std :: string ...

c++ stl
1个回答
0
投票
反向迭代器是常规迭代器上的适配器。并且erase重载仅接受常规,非反向,iteratorconst_iteratorreverse_it.base()的作用是在reverse_iterator中解开适配的迭代器。因此,这是从iterator中获取reverse_iterator或从const_iterator中获取const_reverse_iterator的一种方法。
© www.soinside.com 2019 - 2024. All rights reserved.