At least if I understand your intent correctly, the algorithm to use here would almost certainly be std::transform, not std::accumulate.
accumulate is intended for taking some collection, and simply adding them up, roughly equivalent to sum() in a spreadsheet (for one example).
transform allows you (among other things) to combine two collections, about the way you seem to want to.
#include <vector>
#include <array>
#include <algorithm>
#include <iterator>
#include <iostream>
int main() {
std::vector<float> d;
d.resize(800);
std::array<float, 8> adder { 1, 2, 3, 4, 5, 6, 7, 8};
size_t start = 40;
const auto it_begin = d.begin() + start;
const auto it_end = d.begin() + start + adder.size();
// do the addition:
std:transform(it_begin, it_end, adder.begin(), it_begin, [](float a, float b) { return a + b; });
// show the modified part of the array.
std::copy(it_begin, it_end, std::ostream_iterator<float>(std::cout, "\n"));
}
I've taken the liberty of simplifying a bit of the other code as well, but not in ways that are likely to matter much here.
Since you only need an iterator to the beginning of the second collection, you can simplify the code a bit further if you want, by using adder as the first collection, and the slice of d as the second:
#include <vector>
#include <array>
#include <algorithm>
#include <iterator>
#include <iostream>
int main() {
std::vector<float> d;
d.resize(800);
std::array<float, 8> adder { 1, 2, 3, 4, 5, 6, 7, 8};
size_t start = 40;
const auto it_begin = d.begin() + start;
std:transform(adder.begin(), adder.end(), it_begin, it_begin, [](float a, float b) { return a + b; });
std::copy(it_begin, it_begin+adder.size(), std::ostream_iterator<float>(std::cout, "\n"));
}
As it stands right now, we still use an iterator to the end of the affected portion of d when we print things out, but that was added just to make it clear that we'd actually done something, not to fulfill any real requirement.