Using inputted data from vector to create two outputs
Although there's room for argument that it might be an abuse, one way you could do the adjacent sums part of this would be to use std::adjacent_difference, but pass it a function that adds instead of subtracts:

std::adjacent_difference(inputs.begin(), inputs.end(), 
    std::ostream_iterator&lt;int&gt;(std::cout, "\t"),
    std::plus&lt;int&gt;());


Note, however, that the first result you get from this will be just the first item, not added to anything. Each subsequent value in the result will be the sum of the current and previous items.

You might consider, instead, implementing an adjacent_sum that produces the result you want a little more directly:

template &lt;class InIt, class OutIt&gt;
OutIt adjacent_sum(InIt begin, InIt end, OutIt result) { 
     ++begin;     
     while (begin != end) {
          *result = *begin + *(begin-1);
          ++result;
          ++begin;
     }
     return result;
}

// ...

adjacent_sum(inputs.begin(), inputs.end(), 
    std::ostream_iterator&lt;int&gt;(std::cout, " "));


For the second part, I'd probably use std::transform, supplying forward iterators for the first range, and a reverse iterator for the beginning of the second range:

std::transform(inputs.begin(), inputs.begin()+inputs.size()/2, 
    inputs.rbegin(), 
    std::ostream_iterator&lt;int&gt;(std::cout, " "), 
    std::plus&lt;int&gt;());