На самом деле std :: vector предназначены для использования в качестве вкладки C при необходимости. (Стандарт C ++ требует, чтобы для векторной реализации, насколько я знаю, замена для массива в Википедии ) Например, совершенно законно сделать следующее, по моему мнению:
int main()
{
void foo(const char *);
sdt::vector<char> vec;
vec.push_back('h');
vec.push_back('e');
vec.push_back('l');
vec.push_back('l');
vec.push_back('o');
vec.push_back('/0');
foo(&vec[0]);
}
Конечно, либо foo не должен копировать адрес, переданный в качестве параметра, и сохранять его где-либо, либо вы должны убедиться в том, что в вашей программе никогда не добавляется какой-либо новый элемент в vec или не запрашивается изменение его емкости. Или ошибка сегментации риска ...
Поэтому в вашем примере это приводит к
vector.insert(pos, &vec[first_index], &vec[last_index]);