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};
// コンテナの要素数を取得。
std::ptrdiff_t n1 = std::ssize(v);
assert(n1 == 3);
// 生配列の要素数を取得
std::ptrdiff_t n2 = std::ssize(ar);
assert(n2 == 3);
}
18
#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);
}
出力
バージョン
言語
- C++20
処理系
- Clang: 9.0 ✅
- GCC:
- Visual C++: ??