最終更新日時(UTC):
が更新

履歴 編集

function template
<iterator>

std::ssize(C++20)

namespace std {
  template <class C>
  constexpr auto ssize(const C& c)
    -> common_type_t<ptrdiff_t, make_signed_t<decltype(c.size())>>; // (1)

  template <class T, ptrdiff_t N>
  constexpr ptrdiff_t ssize(const T (&array)[N]) noexcept;          // (2)
}

概要

コンテナの要素数を、符号付き整数型で取得する。

  • (1) : コンテナの要素数を取得する
  • (2) : 生配列の要素数を取得する

この関数の戻り値は、標準コンテナも含めて基本的にはstd::ptrdiff_t型が返る。ただし、自作コンテナのsize()メンバ関数がstd::size_tと異なる幅の型を返す場合は、それに対応する符号付き整数型が返る。

戻り値

  • (1) : return c.size();
  • (2) : return N;

#include <cassert>
#include <vector>
#include <iterator>

int main()
{
  std::vector<int> v = {1, 2, 3};
  int ar[] = {1, 2, 3};

  // コンテナの要素数を取得。
  // ptrdiff_tは、多くの環境ではintだと思ってよい
  std::ptrdiff_t n1 = std::ssize(v);
  assert(n1 == 3);

  // 生配列の要素数を取得
  std::ptrdiff_t n2 = std::ssize(ar);
  assert(n2 == 3);
}

出力

バージョン

言語

  • C++20

処理系

参照