C++ STL : advance

2607 ワード

動機
標準ライブラリコンテナを巡るときにiterator(反復器)でコンテナ内の要素にアクセスすることに慣れています.よく使われる習慣的な使い方は:
std::vector<int> vec;
vec.push_back(100);
vec.push_back(101);
vec.push_back(102);
vec.push_back(103);
vec.push_back(104);

std::vector<int>::iterator it;
std::cout << *it << std::endl;
it+=2;
std::cout << *it << std::endl;

上記のプログラムのit+=2は、反復器を後方に移動する2つの要素である.標準ライブラリは、上記の式、すなわちstd::advance(it,2)の代わりに標準的なテンプレート操作を提供し、advanceの英語の意味は増加し、前進することである.その名の通り、反復器はn個の位置を前に押す.
定義#テイギ#
公式std::advanceに関するドキュメント:std::advance reference
template<class InputIt, class Distance>
void advance(InputIt& it, Distance n);
  • it:反復変数
  • n増加する必要があるベクトル長
  • 使用法
    #include 
    #include 
    #include 
    
    int main() 
    {
        std::vector<int> v{ 3, 1, 4 };
    
        auto vi = v.begin();
    
        std::advance(vi, 2);
    
        std::cout << *vi << '
    '
    ; }

    プログラム出力:
    4

    まとめ
  • std::advanceは反復器をオフセット操作するために使用される
  • 使用前にヘッダファイル
  • を含める.