面试题答案
一键面试#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);
}
}
}
}
为确保函数能正确处理不同内存布局的数组,需要根据数组的布局方式来正确计算元素的索引。在行优先存储中,索引的计算是基于行、列、层的顺序;而在列优先存储中,索引的计算是基于层、列、行的顺序。调用者在调用函数时,需要明确知道数组的内存布局方式,并选择合适的函数进行调用。