Как C ++ выводит массив по умолчанию?

Моя работа заставила меня работать с OpenFOAM (симуляция жидкости), которая основана на C ++. Я ничего не знаю о C ++, даже о том, как скомпилировать программу hello world. В OpenFOAM вы можете вывести трехмерный массив в виде ascii в текстовом файле. Это нормально, потому что мой расчет не займет много времени. В файле он имеет одно значение на строку. Какой порядок имеют эти значения?

Итак, в Фортране я могу сделать

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 ++?

-3

Решение

Нет стандартной функциональности для вывода массива (или std::vectorили std::arrays) содержимое в один вызов в C ++. Вы должны написать тройной цикл самостоятельно.

Следовательно, просто запишите его в том порядке, в котором вы хотите, и используйте тот же порядок, если вы хотите прочитать его обратно.

2

Другие решения

В C ++ нет способа по умолчанию для вывода массива. Вы можете только выводить элемент массива за элементом, перебирая его.

Однако то, о чем вы говорите, совершенно не связано с самим выводом. То, о чем вы говорите, это упорядочение индекса многомерного массива при отображении в линейный массив (например, x-fast или y-fast).

Когда речь идет о динамически размещаемых массивах, C ++ не из коробки поддерживает многомерное распределение, поэтому нет способа «по умолчанию» для упорядочения индекса. Когда вы хотите использовать многомерный массив в C ++, вы сами должны придумать способ сопоставить свои индексы с одномерным массивом. При выводе массива вы просто перебираете отдельные элементы один за другим и распечатываете их. Результирующий порядок будет тем порядком, который вы выбрали для отображения индекса.

Конечно, вы также можете распечатать их в другом порядке, нежели тот, который у них есть в памяти. Но по умолчанию нет.

1

Пример использования 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;
}
0
По вопросам рекламы [email protected]