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]);