Namespaces
Variants

std:: next

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定義先ヘッダ <iterator>
template < class InputIt >
InputIt next ( InputIt it, typename std:: iterator_traits < InputIt > :: difference_type n = 1 ) ;
(C++11以降)
(C++17まで)
template < class InputIt >

constexpr

InputIt next ( InputIt it, typename std:: iterator_traits < InputIt > :: difference_type n = 1 ) ;
(C++17以降)

n th 番目の後続イテレータ(または - n th 番目の前駆イテレータ( n が負の場合))を返します。

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - C++関連の専門用語(Parameters, Return value, Complexity, Possible implementation, Notes, Example, Defect reports, See also)は原文のまま保持しました - HTMLタグ、属性、クラス名、IDなどは一切変更していません - 数値や書式設定は完全に保持されています

パラメータ

it - イテレータ
n - 進める要素数
型の要件
-
InputIt LegacyInputIterator の要件を満たさなければならない。

戻り値

InputIt 型のイテレータで、イテレータ it n th 番目の後続(または - n th 番目の先行要素( n が負の場合))を保持するイテレータ。

計算量

線形。

しかし、 InputIt がさらに LegacyRandomAccessIterator の要件を満たす場合、計算量は定数時間となります。

実装例

template<class InputIt>
constexpr // C++17以降
InputIt next(InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1)
{
    std::advance(it, n);
    return it;
}

注記

++ c. begin ( ) はしばしばコンパイル可能ですが、保証されているわけではありません: c. begin ( ) は右辺値式であり、右辺値のインクリメントが動作することが保証されていることを規定する LegacyInputIterator 要件は存在しません。特に、イテレータがポインタとして実装されている場合や、 operator++ が左辺値参照修飾されている場合、 ++ c. begin ( ) はコンパイルできませんが、 std :: next ( c. begin ( ) ) はコンパイルできます。

#include <iostream>
#include <iterator>
#include <vector>
int main()
{
    std::vector<int> v{4, 5, 6};
    auto it = v.begin();
    auto nx = std::next(it, 2);
    std::cout << *it << ' ' << *nx << '\n';
    it = v.end();
    nx = std::next(it, -2);
    std::cout << ' ' << *nx << '\n';
}

出力:

4 6
 5

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2353 C++11 next LegacyForwardIterator を要求 LegacyInputIterator を許可

関連項目

(C++11)
イテレータをデクリメントする
(関数テンプレート)
イテレータを指定された距離だけ進める
(関数テンプレート)
2つのイテレータ間の距離を返す
(関数テンプレート)
イテレータを指定された距離だけ、または境界までインクリメントする
(アルゴリズム関数オブジェクト)