Skip to content

Latest commit

 

History

History
78 lines (59 loc) · 2.07 KB

ssize.md

File metadata and controls

78 lines (59 loc) · 2.07 KB

ssize

  • iterator[meta header]
  • std[meta namespace]
  • function template[meta id-type]
  • cpp20[meta cpp]
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)
}
  • common_type_t[link /reference/type_traits/common_type.md]
  • ptrdiff_t[link /reference/cstddef/ptrdiff_t.md]
  • make_signed_t[link /reference/type_traits/make_signed.md]

概要

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

  • (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};

  // コンテナの要素数を取得。
  std::ptrdiff_t n1 = std::ssize(v);
  assert(n1 == 3);

  // 生配列の要素数を取得
  std::ptrdiff_t n2 = std::ssize(ar);
  assert(n2 == 3);
}
  • std::ssize[color ff0000]
  • std::ptrdiff_t[link /reference/cstddef/ptrdiff_t.md]

出力

バージョン

言語

  • C++20

処理系

関連項目

参照