Skip to content

Latest commit

 

History

History
98 lines (72 loc) · 2.88 KB

File metadata and controls

98 lines (72 loc) · 2.88 KB

at

  • ranges[meta header]
  • std::ranges[meta namespace]
  • view_interface[meta class]
  • function template[meta id-type]
  • cpp29[meta cpp]
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
  • random_access_range[link ../random_access_range.md]
  • sized_range[link ../sized_range.md]
  • range_difference_t[link ../range_difference_t.md]

概要

範囲チェックをともなって、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;
  }
}
  • at[color ff0000]
  • std::ranges::subrange[link ../subrange.md]

出力

2
out_of_range

バージョン

言語

  • C++29

処理系

  • Clang: 24 [mark verified]
  • GCC: 17 [mark verified]
  • Visual C++: 2026 Update 6 [mark noimpl]

関連項目

参照