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

C++ STL Vectors: Get iterator from index?

所以,我编写了一组代码,通过index[]访问STL向量中的元素,但现在我只需要复制向量的一部分。看起来vector.insert(pos, first, last)是我想要的功能…但我只有第一个和最后一个。有没有什么好方法可以让迭代器得到这些值?


试试这个:

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


通过上述方式( v.begin() + index )酒店@ dirkgently几乎为载体

std::advance( v.begin(), index )最通用的方式和随机存取iterators工程常数时间的价值。

编辑使用的差异:

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

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

添加后litb Notes"。


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

更新:需要一个C + +编译器试用标准


或者你可以使用std::advance

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

actutally性病::向量是用来加载C是用作表时需要。(这是标准的C + +实现的载体要求,只要我知道的替代数组中的维基百科)例如,它是完全合法的folowing这样做,告诉我:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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需要传递的参数信息和商店作为一个地方,你应该确保你的程序或不推到任何新项目或在血管内皮细胞,改变其容量要求。分段错误或风险……

因此,它导致在你的酒店

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