Clarification for the 3. task

You do not have to implement the functions as templates (we have not discussed templates yet). Instead, you can define the return type of the functions like this:
typedef int T;  // define 'T' to mean 'int'

vector<T> reverse(/* argument list not shown here */)  // 'reverse' is defined to return 'vector<int>'
{
   ...