最終更新日時:
が更新

履歴 編集

function template
<ranges>

std::ranges::view_interface::at(C++29)

template<random_access_range R = D>
  requires sized_range<R>
constexpr decltype(auto) at(range_difference_t<R> n);       // (1) C++29

template<random_access_range R = const D>
  requires sized_range<R>
constexpr decltype(auto) at(range_difference_t<R> n) const; // (2) C++29

概要

範囲チェックをともなって、Rangeの要素にアクセスする。

範囲チェックがないoperator[]と異なり、範囲外のインデックスを指定した場合は例外を送出する。

テンプレートパラメータ制約

view_interface<D>に対して、

戻り値

(1), (2)ともに(*this)[n]

例外

n < 0もしくはn >= ranges::distance(derived())である場合、std::out_of_rangeを送出する。

備考

  • この関数は、例外を送出しうるため、フリースタンディング処理系では削除される(フリースタンディング処理系では使用できない)

#include <iostream>
#include <ranges>
#include <stdexcept>
#include <vector>

int main()
{
  std::vector<int> v = {1, 2, 3};
  auto sub = std::ranges::subrange{v.begin(), v.end()};

  std::cout << sub.at(1) << std::endl;

  // 範囲外のインデックスを指定すると例外が送出される
  try {
    sub.at(3);
  }
  catch (const std::out_of_range&) {
    std::cout << "out_of_range" << std::endl;
  }
}

出力

2
out_of_range

バージョン

言語

  • C++29

処理系

関連項目

参照