C ++ STL向量:从索引获取迭代器?

时间:2009-03-22 18:41:34

标签: c++ stl vector iterator

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

5 个答案:

答案 0 :(得分:263)

试试这个:

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

答案 1 :(得分:79)

@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笔记之后添加。

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