Я пытаюсь объединить несколько векторов для создания результирующего вектора, который является объединением элементов во входных векторах, используя STL в C++. Каждый вход уже находится в отсортированном порядке, а элементы - без знака.C++ STL set_union получает итератор вектора ошибок + смещение вне диапазона
Я получаю сообщение об ошибке «Выражение: векторный итератор + смещение вне диапазона», и я не могу сказать почему. Это отладочная сборка, работающая в отладчике Visual Studio 2013.
Вот код:
std::vector <unsigned short> wl, temp;
int iS; std::vector <unsigned short>::iterator oi, it;
for (iS=0; iS<nScans; iS++)
{
std::vector<unsigned short> sc(scan[iS].wavelength, scan[iS].wavelength + scan[iS].nWavelengths);
oi=set_union(wl.begin(), wl.end(), sc.begin(), sc.end(), temp.begin());
wl.assign(temp.begin(), oi); // temp is needed because destination cannot overlap source
}
Цель состоит в том, что вектор длин волн от каждого сканирования (SC) будут объединены в вектор WL. (Вектор wl затем копируется в массив C++ без знака short по коду, не показанному здесь).
Я думаю, что понимаю ваше предложение, но можете ли вы объяснить, почему векторная температура не увеличивается автоматически? Я думал, что это была цель векторного контейнера: расширяться по мере необходимости. – Woody20
@ Woody20 Я попытался объяснить, см. Мой обновленный ответ. –