// vslice.cpp -- using valarray slices #include #include #include const int SIZE = 12; typedef std::valarray vint; // simplify declarations void show(const vint & v, int cols); int main() { using std::slice; // from 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 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; }