C++ <array> size 函数
size 是 array 中最常用、最基础的函数之一,用于获取容器中元素的数量。
size 是容器类的成员函数,用于返回容器当前包含的元素个数。与 vector 不同,array 的大小是固定的,在编译时确定。
size 是操作 array 时最频繁使用的函数,用于循环遍历、边界检查等场景。
单词释义: 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>