所以,我写了一堆代码,通过index[]访问stl向量中的元素,但现在我只需要复制向量的一大块。它看起来像一个向量。插入(pos, first, last)是我想要的函数…除了我只有第一个和最后一个整数。有什么更好的方法可以得到这些值的迭代器吗?
@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);
推荐文章
- c++ STL向量:从索引获取迭代器?
- 如何“=默认”不同于“{}”默认构造函数和析构函数?
- 面试问题:检查一个字符串是否是另一个字符串的旋转
- 如何使用枚举作为标志在c++ ?
- 在c++程序中以编程方式检测字节序
- 为什么我的程序不能在Windows 7下用法语编译?
- 如何获取变量的类型?
- 什么是奇怪的重复模板模式(CRTP)?
- 连接两个向量的最佳方法是什么?
- 在c++中,是通过值传递更好,还是通过引用到const传递更好?
- 在STL中deque到底是什么?
- Windows上最好的免费c++分析器是什么?
- 如何自动转换强类型枚举为int?
- 在一个类中使用具有成员函数的泛型std::function对象
- 'for'循环中的后增量和前增量产生相同的输出