C++ STL Vectors: получить итератор из индекса?
Итак, я написал кучу кода, который обращается к элементам в векторе стл по индексу[], но теперь мне нужно скопировать только часть вектора. Похоже на vector.insert(pos, first, last)
- Это функция, которую я хочу... у меня есть только первый и последний как Ints. Есть ли хороший способ получить итератор для этих значений?
5 ответов
путь, упомянутый @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.
или вы можете использовать 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]);