我读了一些用c++编写的代码,如下所示:
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int iarr[] = {30, 12, 55, 31, 98, 11, 41, 80, 66, 21};
vector<int> ivector(iarr, iarr + 10);
}
在上面的代码中,我将
iarr
和iarr+10
传递给ivector(iarr, iarr + 10)
以创建新的 vector ,这是构造vector
的正确方法吗?我检查了STL文件,那里没有提到,可以吗?而且,
iarr
数组包含10个元素,我应该使用ivector(iarr, iarr+9)
吗? 最佳答案
是的,这是允许的,是的,您做对了。
您正在调用此模板化构造函数:
template<class InputIterator>
vector(
InputIterator _First,
InputIterator _Last
);
模板参数
InputIterator
是int*
(这是表达式iarr
和iarr + 10
的类型)。由于文档指出
_Last
必须指向范围中最后一个元素之外的一个元素,因此+ 10
也可以正确复制数组中的所有10个元素(iarr + 9
指向最后一个元素,iarr + 10
指向最后一个元素之后的元素)。