Picks
Vector and matrix
picks allow arbitrary elements to be selected from a vector rather than just those patterns which can be selected by subscripting. A pick is created by calling member function
pick(const RWIntVec&), where
RWIntVec is a typedef for
RWMathVec<int>. You can think of it as subscripting with an
RWIntVec instead of an
int:
// Set up picked elements:
RWIntVec ipick("[3 4 8]");
RWMathVec<double> dv(10, 0, 2); // 0 2 4 6 8 10 12 14 16 18
RWMathVecPick<double> dvPick = dv.pick(ipick);
cout << dvPick.length() << endl; // 3
cout << dvPick(0) << endl; // 6
cout << dvPick(2) << endl; // 16
Picks can also be used as lvalues:
dvPick = -1;
cout << dv; // 0 2 4 -1 -1 10 12 14 -1 18
Unlike the subscripting operators, vector picks are not built into the classes, but implemented using a helper class with no public constructors. The result is that, unlike subscripting, picking does not create a new view. Because they are implemented using a helper class and their indexing is done using
RWMathVec<int>s, picks are less efficient than subscripting.