Если и то, и другое не будет изменено (добавление / удаление элементов не будет - изменение существующих будет вполне приемлемо, если вы обращаете внимание на проблемы с многопоточностью), вы можете просто обойти data.begin() + 100000
и data.begin() + 101000
и сделать вид они begin()
и end()
меньшего вектора.
Или, поскольку векторное хранилище гарантированно будет смежным, вы можете просто передать массив из 1000 элементов:
T *arrayOfT = &data[0] + 100000;
size_t arrayOfTLength = 1000;
Оба эти метода требуют постоянного времени, но требуют, чтобы длина данных не увеличивалась, что вызывает перераспределение.