C++默认如何输出数组?

How does C++ output an array by default?

我的工作让我使用基于 C++ 的 OpenFOAM(流体模拟东西)。我对 C++ 一无所知,甚至不知道如何编译一个 hello world 程序。在 OpenFOAM 中,您可以将三维数组输出为文本文件中的 ascii。这没关系,因为我的计算不需要很长时间。在文件中,它每行有一个值。这些值的顺序是什么?

所以,在 Fortran 中我可以做到

WRITE(*,*) 3d_array

它会按照保存顺序显示数组的值,这意味着第一次迭代是在 x 方向,然后是 y,然后是 z 方向。输出的顺序与我以这种方式输出的顺序相同:

integer, allocatable, dimension(x,y,z)::3d_array
[...]

do k=1,z
    do j=1,y
        do i=1,x
            write(*,*) 3d_array(i,j,k)
        end do
    end do
end do

它在 C++ 中是如何工作的?

在 C++ 中,没有在单个调用中输出数组(或 std::vectorstd::array)内容的标准功能。你必须自己写三重循环。

因此,按你喜欢的顺序写就可以了,如果你想读回来就用同样的顺序。

使用std::vector的示例:

#include <iostream>
#include <vector>

int main() {
std::vector< std::vector< std::vector<int> > >vec3d{ {{0, 1, 2}, {1, 2, 3}}, {{5, 6}} };

for (auto i : vec3d) {
    std::cout << "[";
    for (auto j : i) {
        std::cout << "[";
        for (auto k : j) {
            std::cout << k << " ";
        }
        std::cout << "]";
    }
    std::cout << "]";
}

return 0;
}

C++ 中没有输出数组的默认方式。您只能通过迭代逐个元素地输出数组。

但是,您所说的与输出本身无关。您所说的是映射到线性数组时多维数组的索引排序(例如 x 最快或 y 最快)。

谈到动态分配的数组时,C++ 不支持开箱即用的多维分配,因此索引排序没有 "default" 方式。当你想在 C++ 中使用多维数组时,你必须自己想办法将你的索引映射到一维数组。输出数组时,您只需一个接一个地遍历各个元素并打印它们。生成的顺序将是您为索引映射选择的顺序。

当然,您也可以选择以不同于实际内存中顺序的顺序打印它们。但是没有默认。