C++ <array> size 関数
sizearray の中で最も一般的で基本的な関数の一つであり、コンテナ内の要素の数を取得するために使われます。。
sizeコンテナクラスのメンバ関数であり、コンテナが現在含む要素の数を返すために使われます。。vector とは異なり、array のサイズは固定で、コンパイル時に決定されます。
sizearray を操作する際に最も頻繁に使用される関数であり、ループ処理や境界チェックなどの場面で使用されます。
単語の意味: sizeは「サイズ」を意味し、コンテナ内の要素の数を表します。
基本構文とパラメータ
sizeコンテナクラスのメンバ関数であり、呼び出しにパラメータは不要です。
構文形式
constexpr size_type size() const noexcept;
パラメータの説明
- パラメータ: パラメータなし
sizeいかなるパラメータも受け取りません。
関数の説明
- 戻り値: 返すのは
size_type型(通常はsize_t)、コンテナ内の要素の数を表します。 - 効果: コンテナに固定保存されている要素の数を表す非負の整数を返します。
- 注意:
size()返されるのはコンパイル時定数(constexpr)であり、コンパイル時に使用できます。
実例
一連の例を通して、徹底的にsizeの使い方をマスターしましょう。
例1: 基本用法 - 要素数の取得
実例
#include <iostream>
#include <array>
int main() {
// 異なるサイズの array
std::array<int, 3> small = {1, 2, 3};
std::array<int, 5> medium = {1, 2, 3, 4, 5};
std::array<int, 10> large = {};
std::cout << "small array サイズ: " << small.size() << std::endl;
std::cout << "medium array サイズ: " << medium.size() << std::endl;
std::cout << "large array サイズ: " << large.size() << std::endl;
return 0;
}
#include <array>
int main() {
// 異なるサイズの array
std::array<int, 3> small = {1, 2, 3};
std::array<int, 5> medium = {1, 2, 3, 4, 5};
std::array<int, 10> large = {};
std::cout << "small array サイズ: " << small.size() << std::endl;
std::cout << "medium array サイズ: " << medium.size() << std::endl;
std::cout << "large array サイズ: " << large.size() << std::endl;
return 0;
}
実行結果の予想:
small array 大小: 3 medium array 大小: 5 large array 大小: 10
コードの解説:
- array のサイズはコンパイル時に決定され、テンプレートパラメータによって指定されます。
size()返されるのは、このコンパイル時に決定された値です。
例2: ループ内で size() を使用する
size()ループ処理を制御するために最もよく使用されます。
実例
#include <iostream>
#include <array>
int main() {
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
// size() を使用してループを制御する
std::cout << "すべての要素を走査: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// size() を使用して逆方向走査の境界を取得する
std::cout << "逆方向走査: ";
for(size_t i = numbers.size(); i > 0; --i) {
std::cout << numbers[i - 1] << " ";
}
std::cout << std::endl;
return 0;
}
#include <array>
int main() {
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
// size() を使用してループを制御する
std::cout << "すべての要素を走査: ";
for(size_t i = 0; i < numbers.size(); ++i) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// size() を使用して逆方向走査の境界を取得する
std::cout << "逆方向走査: ";
for(size_t i = numbers.size(); i > 0; --i) {
std::cout << numbers[i - 1] << " ";
}
std::cout << std::endl;
return 0;
}
実行結果の予想:
遍历所有元素: 10 20 30 40 50 反向遍历: 50 40 30 20 10
コードの解説:
numbers.size()5 を返し、ループ条件i < numbers.size()範囲外にならないことを保証します。- 逆方向走査のときは、
size()から 1 まで減らしていき、その後アクセスするのは[i-1]。 - array の
size()であるconstexprはコンパイル時に評価できます。 - これは vector とは異なります。vector の
size()はコンパイル時定数ではありません。
例3: constexpr size の使用
array のsize()は constexpr であり、コンパイル時に使用できます。
実例
#include <iostream>
#include <array>
// テンプレート関数:指定されたサイズの array を作成する
template<size_t N>
void printSize(const std::array<int, N>& arr) {
// size() はコンパイル時定数が必要な場所で使用できます
constexpr size_t s = arr.size();
std::cout << "Array size: " << s << std::endl;
}
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
printSize(arr);
return 0;
}
#include <array>
// テンプレート関数:指定されたサイズの array を作成する
template<size_t N>
void printSize(const std::array<int, N>& arr) {
// size() はコンパイル時定数が必要な場所で使用できます
constexpr size_t s = arr.size();
std::cout << "Array size: " << s << std::endl;
}
int main() {
std::array<int, 5> arr = {1, 2, 3, 4, 5};
printSize(arr);
return 0;
}
コードの解説:
その他の拡張
C++ コンテナクラス <array>