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


试试这个:

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

@dirkgently (v.e begin() + index)提到的方法,对于向量来说又好又快

但是std::advance(v.begin(), index)是最通用的方式,对于随机访问迭代器也是常数时间工作。

编辑 用法差异:

std::vector<>::iterator it = ( v.begin() + index );

or

std::vector<>::iterator it = v.begin();
std::advance( it, index );

在@litb注释后添加。


实际上,std::vector是在需要时作为C选项卡使用的。(据我所知,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]);

你总是可以使用std::advance在常数时间内将迭代器移动一定数量的位置:

std::vector<int>::iterator it = myvector.begin();
std::advance(it, 2);

也;自动it = std::next(v.begin(),索引);

更新:需要c++ 11x兼容的编译器