template <class T> void generate(void (*fun)(ptrdiff_t n,T* p),T* b,T* e);
None.
For each cell in an array from the leftmost to the rightmost, generate calls function fun with two arguments: (1) the cell index (assuming that the index of the first cell is 0) and (2) a pointer to the cell.
If N is the size of the array, then complexity is O(N). Exactly N function calls to fun are made.
In the following example, iota assigns a consecutive integer starting from 0 to every location in the array (similar to the APL function iota):
void zap(ptrdiff_t n, int* address){ *address = n; } void iota(int* b, int* e){ generate(zap, b, e); }
Because a Block (see Block(3C++)) can always be used wherever an array is called for, Array Algorithms can also be used with Blocks. In fact, these two components were actually designed to be used together.