MST
星途 面试题库

面试题:C++ 多维数组参数在不同内存布局下的函数处理

已知C++ 中多维数组的内存布局有行优先和列优先两种方式。假设你需要编写一个函数,该函数能够处理以行优先或列优先方式存储的三维数组作为参数,且函数要对数组元素进行特定运算(例如所有元素平方),请写出该函数的实现代码,并说明如何确保函数能正确处理不同内存布局的数组。
42.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <cmath>

// 处理行优先存储的三维数组
void processRowMajor(float* arr, int sizeX, int sizeY, int sizeZ) {
    for (int i = 0; i < sizeX; ++i) {
        for (int j = 0; j < sizeY; ++j) {
            for (int k = 0; k < sizeZ; ++k) {
                int index = i * sizeY * sizeZ + j * sizeZ + k;
                arr[index] = std::pow(arr[index], 2);
            }
        }
    }
}

// 处理列优先存储的三维数组
void processColumnMajor(float* arr, int sizeX, int sizeY, int sizeZ) {
    for (int i = 0; i < sizeX; ++i) {
        for (int j = 0; j < sizeY; ++j) {
            for (int k = 0; k < sizeZ; ++k) {
                int index = k * sizeX * sizeY + j * sizeX + i;
                arr[index] = std::pow(arr[index], 2);
            }
        }
    }
}

为确保函数能正确处理不同内存布局的数组,需要根据数组的布局方式来正确计算元素的索引。在行优先存储中,索引的计算是基于行、列、层的顺序;而在列优先存储中,索引的计算是基于层、列、行的顺序。调用者在调用函数时,需要明确知道数组的内存布局方式,并选择合适的函数进行调用。