所以,我写了一堆代码,通过index[]访问stl向量中的元素,但现在我只需要复制向量的一大块。它看起来像一个向量。插入(pos, first, last)是我想要的函数…除了我只有第一个和最后一个整数。有什么更好的方法可以得到这些值的迭代器吗?
当前回答
实际上,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兼容的编译器
实际上,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]);
试试这个:
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注释后添加。
推荐文章
- cplusplus.com给出的错误、误解或坏建议是什么?
- 找出质数最快的算法是什么?
- c++枚举类可以有方法吗?
- 格式化IO函数(*printf / *scanf)中的转换说明符%i和%d之间的区别是什么?
- 将析构函数设为私有有什么用?
- main()中的Return语句vs exit()
- 为什么c#不提供c++风格的'friend'关键字?
- 在函数的签名中添加关键字
- 我如何在Visual Studio中预处理后看到C/ c++源文件?
- 为什么在标准容器中使用std::auto_ptr<>是错误的?
- 用比较double和0
- 保护可执行文件不受逆向工程的影响?
- 在c++中字符串前面的“L”是什么意思?
- 为什么std::map被实现为红黑树?
- 空括号的默认构造函数