面试题答案
一键面试- 模板类
array
确保大小在编译期确定的原理:std::array
是C++标准库中的模板类,其大小是模板参数。在编译时,编译器会根据传入的模板参数(数组大小)实例化相应大小的array
。例如std::array<int, 5> arr;
,编译器会直接为这个array
分配能容纳5个int
的空间,而这个大小在编译阶段就已经确定,不能在运行时改变。
std::array
比std::vector
更合适的实际场景:- 固定大小且性能敏感场景:当数组大小在整个程序运行期间都不会改变,并且对性能有较高要求时,
std::array
更合适。例如,在图形渲染中表示固定大小的顶点数组,std::array
不会有动态内存分配和释放的开销,能提高性能。 - 栈上分配需求:如果希望数组在栈上分配(而不是堆上,
std::vector
动态分配在堆上),以减少堆内存碎片等问题,std::array
是更好的选择。例如,一些嵌入式系统对堆内存使用有限制,std::array
可以满足在栈上分配固定大小数组的需求。
- 固定大小且性能敏感场景:当数组大小在整个程序运行期间都不会改变,并且对性能有较高要求时,
- 计算
std::array
所有元素平方和的函数:
#include <array>
#include <iostream>
template <typename T, size_t N>
T sumOfSquares(const std::array<T, N>& arr) {
T sum = T();
for (const auto& num : arr) {
sum += num * num;
}
return sum;
}
可以这样调用该函数:
int main() {
std::array<int, 3> arr = {1, 2, 3};
int result = sumOfSquares(arr);
std::cout << "Sum of squares: " << result << std::endl;
return 0;
}