Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 2

способ, упомянутый @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.

Ответ 3

Также; auto it = std::next(v.begin(), index);

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

Ответ 4

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

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

Ответ 5

Actutally std::vector предназначены для использования в качестве вкладки 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]);