C ++ STLvector:从​​索引获取迭代器?

所以,我写了一堆通过index []访问stl向量中的元素的代码,但现在我只需要复制一个向量块。 它看起来像vector.insert(pos, first, last)是我想要的function…除了我只有第一个和最后一个整数。 有没有什么好的方法可以得到这些值的迭代器?

尝试这个:

 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注释后添加。

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

更新:需要一个C ++ 11x兼容的编译器

或者你可以使用std::advance

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

actutally std :: vector是为了在需要时用作C标签。 (据我所知,C ++标准要求对于vector实现, 在维基百科中用数组代替 )例如,根据我的说法,这样做是完全合法的:

 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都不能复制作为parameter passing的地址并将其存储在某个地方,或者你应该确保在你的程序中永远不要推动vec中的任何新项目或请求改变其容量。 或风险分段错误…

因此,在你的例子导致

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