56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
|
// vslice.cpp -- using valarray slices
|
||
|
#include <iostream>
|
||
|
#include <valarray>
|
||
|
#include <cstdlib>
|
||
|
|
||
|
const int SIZE = 12;
|
||
|
typedef std::valarray<int> vint; // simplify declarations
|
||
|
void show(const vint & v, int cols);
|
||
|
int main()
|
||
|
{
|
||
|
using std::slice; // from <valarray>
|
||
|
using std::cout;
|
||
|
vint valint(SIZE); // think of as 4 rows of 3
|
||
|
|
||
|
int i;
|
||
|
for (i = 0; i < SIZE; ++i)
|
||
|
valint[i] = std::rand() % 10;
|
||
|
cout << "Original array:\n";
|
||
|
show(valint, 3); // show in 3 columns
|
||
|
vint vcol(valint[slice(1,4,3)]); // extract 2nd column
|
||
|
cout << "Second column:\n";
|
||
|
show(vcol, 1); // show in 1 column
|
||
|
vint vrow(valint[slice(3,3,1)]); // extract 2nd row
|
||
|
cout << "Second row:\n";
|
||
|
show(vrow, 3);
|
||
|
valint[slice(2,4,3)] = 10; // assign to 2nd column
|
||
|
cout << "Set last column to 10:\n";
|
||
|
show(valint, 3);
|
||
|
cout << "Set first column to sum of next two:\n";
|
||
|
// + not defined for slices, so convert to valarray<int>
|
||
|
valint[slice(0,4,3)] = vint(valint[slice(1,4,3)])
|
||
|
+ vint(valint[slice(2,4,3)]);
|
||
|
show(valint, 3);
|
||
|
// std::cin.get();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void show(const vint & v, int cols)
|
||
|
{
|
||
|
using std::cout;
|
||
|
using std::endl;
|
||
|
|
||
|
int lim = v.size();
|
||
|
for (int i = 0; i < lim; ++i)
|
||
|
{
|
||
|
cout.width(3);
|
||
|
cout << v[i];
|
||
|
if (i % cols == cols - 1)
|
||
|
cout << endl;
|
||
|
else
|
||
|
cout << ' ';
|
||
|
}
|
||
|
if (lim % cols != 0)
|
||
|
cout << endl;
|
||
|
}
|