MST

星途 面试题库

面试题:C++模板类array的特性与应用场景

在C++中,模板类array是如何确保其大小在编译期确定的?举例说明在哪些实际场景下,使用模板类array比使用std::vector更合适,并且编写一个函数,接受一个模板类array作为参数,计算并返回其中所有元素的平方和。
30.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 模板类array确保大小在编译期确定的原理
    • std::array是C++标准库中的模板类,其大小是模板参数。在编译时,编译器会根据传入的模板参数(数组大小)实例化相应大小的array。例如std::array<int, 5> arr;,编译器会直接为这个array分配能容纳5个int的空间,而这个大小在编译阶段就已经确定,不能在运行时改变。
  2. std::arraystd::vector更合适的实际场景
    • 固定大小且性能敏感场景:当数组大小在整个程序运行期间都不会改变,并且对性能有较高要求时,std::array更合适。例如,在图形渲染中表示固定大小的顶点数组,std::array不会有动态内存分配和释放的开销,能提高性能。
    • 栈上分配需求:如果希望数组在栈上分配(而不是堆上,std::vector动态分配在堆上),以减少堆内存碎片等问题,std::array是更好的选择。例如,一些嵌入式系统对堆内存使用有限制,std::array可以满足在栈上分配固定大小数组的需求。
  3. 计算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;
}