C++ <vector> size 関数
sizevectorで最も一般的かつ基本的な関数の1つであり、次の目的で使用されます:コンテナ内の要素数を取得する。
sizeコンテナクラスのメンバ関数であり、次の目的で使用されます:コンテナが現在含む要素数を返します。この値は、vectorに実際に格納されているデータ量を表します。
sizevectorを操作する際に最も頻繁に使用される関数で、ループ走査、境界チェック、条件判断などの場面で使用されます。
単語の意味: size「サイズ」を意味し、コンテナ内の要素数を示します。
基本構文とパラメータ
sizeコンテナクラスのメンバ関数であり、呼び出しにパラメータは不要です。
構文形式
size_type size() const;
パラメータの説明
- パラメータ: パラメータなし
sizeいかなるパラメータも受け付けません。
関数の説明
- 戻り値: 返すのは
size_type型(通常はsize_t)、コンテナ内の現在の要素数を表します。 - 効果: コンテナに実際に格納されている要素数を表す非負の整数を返します。
- 注意:
size()返されるのは要素数であり、容量ではありません。capacity()を使用して容量を取得できます。
実例
一連の例を通して、sizeの使い方を徹底的にマスターしましょう。
例1:基本用法 - 要素数を取得する
実例
#include <iostream>
#include <vector>
int main() {
// 1. 空のvector
std::vector<int> emptyVec;
std::cout << "空のvectorのサイズ: " << emptyVec.size() << std::endl;
// 2. 要素のあるvector
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "要素のあるvectorのサイズ: " << numbers.size() << std::endl;
// 3. push_backを使用して要素を追加
std::vector<std::string> names;
names.push_back("Alice");
names.push_back("Bob");
names.push_back("Charlie");
std::cout << "3つの要素を追加した後のサイズ: " << names.size() << std::endl;
return 0;
}
#include <vector>
int main() {
// 1. 空のvector
std::vector<int> emptyVec;
std::cout << "空のvectorのサイズ: " << emptyVec.size() << std::endl;
// 2. 要素のあるvector
std::vector<int> numbers = {10, 20, 30, 40, 50};
std::cout << "要素のあるvectorのサイズ: " << numbers.size() << std::endl;
// 3. push_backを使用して要素を追加
std::vector<std::string> names;
names.push_back("Alice");
names.push_back("Bob");
names.push_back("Charlie");
std::cout << "3つの要素を追加した後のサイズ: " << names.size() << std::endl;
return 0;
}
実行結果の予想:
空 vector 的大小: 0 有元素 vector 的大小: 5 添加 3 个元素后的大小: 3
コード解説:
- 空のvectorの
size()は0を返します。 - 5つの要素を持つvectorは5を返します。
- 毎回
push_back要素を追加した後、size()は1増加します。
例2:ループ内でsize()を使用する
size()ループ走査を制御するために最もよく使用されます。
実例
#include <iostream>
#include <vector>
int main() {
std::vector<int> 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 <vector>
int main() {
std::vector<int> 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]。
例3:size()を使用した条件判断
size()さまざまな条件判断に使用できます。
実例
#include <iostream>
#include <vector>
#include <string>
void processVector(const std::vector<int>& v) {
if(v.size() == 0) {
std::cout << "コンテナは空です。処理は不要です" << std::endl;
return;
}
if(v.size() == 1) {
std::cout << "コンテナには要素が1つだけあります: " << v[0] << std::endl;
return;
}
std::cout << "コンテナには " << v.size() << " 個の要素があります" << std::endl;
// 十分に大きいかどうかを確認
if(v.size() >= 10) {
std::cout << "これは大きなコンテナです" << std::endl;
}
}
int main() {
std::vector<int> empty;
std::vector<int> single = {42};
std::vector<int> normal = {1, 2, 3, 4, 5};
std::vector<int> large(15, 1);
processVector(empty);
processVector(single);
processVector(normal);
processVector(large);
return 0;
}
#include <vector>
#include <string>
void processVector(const std::vector<int>& v) {
if(v.size() == 0) {
std::cout << "コンテナは空です。処理は不要です" << std::endl;
return;
}
if(v.size() == 1) {
std::cout << "コンテナには要素が1つだけあります: " << v[0] << std::endl;
return;
}
std::cout << "コンテナには " << v.size() << " 個の要素があります" << std::endl;
// 十分に大きいかどうかを確認
if(v.size() >= 10) {
std::cout << "これは大きなコンテナです" << std::endl;
}
}
int main() {
std::vector<int> empty;
std::vector<int> single = {42};
std::vector<int> normal = {1, 2, 3, 4, 5};
std::vector<int> large(15, 1);
processVector(empty);
processVector(single);
processVector(normal);
processVector(large);
return 0;
}
実行結果の予想:
容器为空,无需处理 容器只有一个元素: 42 容器有 5 个元素 这是一个大容器
コード解説:
size() == 0コンテナが空かどうかの確認に使用できます。size() == 1要素が1つだけかどうかの確認に使用できます。size() >= 10コンテナが十分に大きいかどうかの確認に使用できます。
例4:size()とcapacity()の違い
size()は要素数を返し、capacity()は割り当てられた記憶域スペースを返します。
実例
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers;
std::cout << "初期状態:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 要素を追加
for(int i = 0; i < 5; ++i) {
numbers.push_back(i + 1);
}
std::cout << "\n"5つの要素を追加した後:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// resizeを使用してサイズを変更
numbers.resize(10);
std::cout << "\n"resize(10) 後:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// reserveを使用して領域を確保
numbers.reserve(100);
std::cout << "\n"reserve(100) 後:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
return 0;
}
#include <vector>
int main() {
std::vector<int> numbers;
std::cout << "初期状態:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// 要素を追加
for(int i = 0; i < 5; ++i) {
numbers.push_back(i + 1);
}
std::cout << "\n"5つの要素を追加した後:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// resizeを使用してサイズを変更
numbers.resize(10);
std::cout << "\n"resize(10) 後:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
// reserveを使用して領域を確保
numbers.reserve(100);
std::cout << "\n"reserve(100) 後:" << std::endl;
std::cout << " size: " << numbers.size() << std::endl;
std::cout << " capacity: " << numbers.capacity() << std::endl;
return 0;
}
実行結果の予想:
初始状态: size: 0 capacity: 0 添加 5 个元素后: size: 5 capacity: 5 resize(10) 后: size: 10 capacity: 10 reserve(100) 后: size: 10 capacity: 100
コード解説:
size()は実際の要素数です。capacity()は要素に割り当てられた記憶域スペースのサイズです。resize()を変更すると、size()も調整されますcapacity()(必要な場合)。reserve()はcapacity()のみを変更し、は変更しません。size()。
例5:size()を使用して平均値を計算する
を使用してsize()ループと組み合わせて統計値を計算します。
実例
#include <iostream>
#include <vector>
int main() {
std::vector<double> scores = {85.5, 92.0, 78.5, 90.0, 88.5};
// 合計を計算
double sum = 0;
for(size_t i = 0; i < scores.size(); ++i) {
sum += scores[i];
}
// size()を使用して平均値を計算
double average = sum / scores.size();
std::cout << "学生の成績: ";
for(double s : scores) {
std::cout << s << " ";
}
std::cout << std::endl;
std::cout << "総人数: " << scores.size() << std::endl;
std::cout << "総成績: " << sum << std::endl;
std::cout << "平均点: " << average << std::endl;
return 0;
}
#include <vector>
int main() {
std::vector<double> scores = {85.5, 92.0, 78.5, 90.0, 88.5};
// 合計を計算
double sum = 0;
for(size_t i = 0; i < scores.size(); ++i) {
sum += scores[i];
}
// size()を使用して平均値を計算
double average = sum / scores.size();
std::cout << "学生の成績: ";
for(double s : scores) {
std::cout << s << " ";
}
std::cout << std::endl;
std::cout << "総人数: " << scores.size() << std::endl;
std::cout << "総成績: " << sum << std::endl;
std::cout << "平均点: " << average << std::endl;
return 0;
}
実行結果の予想:
学生成绩: 85.5 92.0 78.5 90.0 88.5 总人数: 5 总成绩: 434.5 平均分: 86.9
コード解説:
- を使用すると
size()平均値を簡単に計算できます。 sum / scores.size()平均点が得られます。
その他の拡張
C++ コンテナクラス <vector>