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::vector
或 std::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++ 中使用多维数组时,你必须自己想办法将你的索引映射到一维数组。输出数组时,您只需一个接一个地遍历各个元素并打印它们。生成的顺序将是您为索引映射选择的顺序。
当然,您也可以选择以不同于实际内存中顺序的顺序打印它们。但是没有默认。
我的工作让我使用基于 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::vector
或 std::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++ 中使用多维数组时,你必须自己想办法将你的索引映射到一维数组。输出数组时,您只需一个接一个地遍历各个元素并打印它们。生成的顺序将是您为索引映射选择的顺序。
当然,您也可以选择以不同于实际内存中顺序的顺序打印它们。但是没有默认。