所以,我写了一堆代码,通过index []访问stl向量中的元素,但现在我只需要复制一个向量的块。看起来vector.insert(pos, first, last)
是我想要的功能......除了我只有第一个和最后一个作为整数。有没有什么好方法可以获得这些值的迭代器?
答案 0 :(得分:263)
试试这个:
vector<Type>::iterator nth = v.begin() + index;
答案 1 :(得分:79)
( 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笔记之后添加。
答案 2 :(得分:45)
也; auto it = std::next(v.begin(), index);
更新:需要符合C ++ 11x标准的编译器
答案 3 :(得分:8)
或者您可以使用std::advance
vector<int>::iterator i = L.begin();
advance(i, 2);
答案 4 :(得分:-3)
实际上std :: vector意味着在需要时用作C选项卡。 (就我所知,C ++标准要求对于矢量实现 - replacement for array in Wikipedia) 例如,根据我的说法,完成这项工作是完全合法的:
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]);