18

end() - 1 ではなく rbegin() を使用する利点は、STL コンテナーにどのようなものがあるのか​​疑問に思っています。

たとえば、次のようなものを使用する理由は次のとおりです。

vector<int> v;
v.push_back(999);
vector<int>::reverse_iterator r = v.rbegin();
vector<int>::iterator i = r.base();

それよりも:

vector<int> v;
v.push_back(999);
auto r = v.end() - 1;
4

2 に答える 2

29

rbegin() のイテレータを返しますoperator++。つまり、 を使用するとreverse_iterator、コンテナーを逆方向に反復処理できます。

例:

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> v{0,1,2,3,4};
    for( auto i = v.rbegin(); i != v.rend(); ++i )
        std::cout << *i << '\n';
}

さらに、 のような一部の標準コンテナは前方イテレータstd::forward_listを返すため、 を行うことはできません。l.end()-1

std::for_each最後に、の使用を前提とするアルゴリズムにイテレータを渡す必要がある場合operator++は、 を使用する必要がありますreverse_iterator

于 2015-08-25T15:59:05.757 に答える
17

コンテナが空の場合、end() - 1定義されません。

于 2015-08-25T15:58:51.010 に答える