C++ STL Vectors: получить итератор из индекса?

Итак, я написал кучу кода, который обращается к элементам в векторе стл по индексу[], но теперь мне нужно скопировать только часть вектора. Похоже на vector.insert(pos, first, last) - Это функция, которую я хочу... у меня есть только первый и последний как Ints. Есть ли хороший способ получить итератор для этих значений?

5 ответов


попробуйте это:

vector<Type>::iterator nth = v.begin() + index;

путь, упомянутый @dirkgently ( v.begin() + index ) хороший и быстрый для векторов

но std::advance( v.begin(), index ) самый общий способ и для итераторов произвольного доступа работает постоянное время.

редактировать
различия в использовании:

std::vector<>::iterator it = ( v.begin() + index );

или

std::vector<>::iterator it = v.begin();
std::advance( it, index );

добавлено после @ litb notes.


и auto it = std::next(v.begin(), index);

Update: требуется компилятор, совместимый с C++11x


или вы можете использовать std::advance

vector<int>::iterator i = L.begin();
advance(i, 2);

Actutally 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, или просить изменить его вместимость. Или риск сегментации...

поэтому в вашем exemple это приводит к

vector.insert(pos, &vec[first_index], &vec[last_index]);