#include <iostream> // std::cout
#include <valarray> // std::gslice
void
test_print(std::valarray<
int
>& v,
int
rows,
int
cols,
int
planes)
{
for
(
int
r = 0; r < rows; ++r) {
for
(
int
c = 0; c < cols; ++c) {
for
(
int
z = 0; z < planes; ++z)
std::cout
<< v[r * cols * planes + c * planes + z]
<<
' '
;
std::cout <<
'\n'
;
}
std::cout <<
'\n'
;
}
}
int
main()
{
std::valarray<
int
> v
= { 111, 112, 113, 121, 122, 123, 131, 132,
133, 141, 142, 143, 211, 212, 213, 221,
222, 223, 231, 232, 233, 241, 242, 243 };
std::cout <<
"Initial 2x4x3 array:\n"
;
test_print(v, 2, 4, 3);
v[std::gslice(0, { 2, 4 }, { 4 * 3, 3 })] = 1;
v[std::gslice(1, { 1, 4 }, { 4 * 3, 3 })]
-= v[std::gslice(2, { 1, 4 }, { 4 * 3, 3 })];
std::cout <<
"After column operations: \n"
;
test_print(v, 2, 4, 3);
return
0;
}