4

我需要从std::vector. 类似于 python 切片运算符:

range = vector[0:n]

显而易见的方法是遍历所需的元素。还有其他更好的方法吗?

4

3 回答 3

9

vector 的构造函数之一是:

template <class InputIterator>
vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );

因此,您只需要创建一个传递所需迭代器的新向量。

于 2012-11-09T14:00:23.680 回答
4

vector<T>有一个构造函数,它接受两个标识范围的迭代器。

例子:

std::vector<int> range( &v[0], &v[0]+n );

请注意,即使v是常规数组而不是 a ,这也会起作用,vector因为指向数组中元素的指针的行为类似于迭代器。

于 2012-11-09T14:01:17.987 回答
2

在 C++ 领域,不使用范围,而是使用迭代器。迭代器是指向某个元素的容器的索引。因此,要在开始时使用迭代器,请使用,vec.begin()并使用 来获取迭代器。如果你想迭代这个,你可以简单地做nvec.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)
于 2012-11-09T14:03:38.290 回答