我需要从std::vector
. 类似于 python 切片运算符:
range = vector[0:n]
显而易见的方法是遍历所需的元素。还有其他更好的方法吗?
vector 的构造函数之一是:
template <class InputIterator>
vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
因此,您只需要创建一个传递所需迭代器的新向量。
vector<T>
有一个构造函数,它接受两个标识范围的迭代器。
例子:
std::vector<int> range( &v[0], &v[0]+n );
请注意,即使v
是常规数组而不是 a ,这也会起作用,vector
因为指向数组中元素的指针的行为类似于迭代器。
在 C++ 领域,不使用范围,而是使用迭代器。迭代器是指向某个元素的容器的索引。因此,要在开始时使用迭代器,请使用,vec.begin()
并使用 来获取迭代器。如果你想迭代这个,你可以简单地做n
vec.begin() + n
for (atd::vector<Foo>::iterator it = vec.begin(); it != vec.begin() + n; ++it)
如果要创建一个新向量,可以使用 Luchian 提到的构造函数,如下所示:
std::vector<Foo> vec2(vec.begin(), vec.begin() + n)