我读了一些用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);
}

在上面的代码中,我将iarriarr+10传递给ivector(iarr, iarr + 10)以创建新的 vector ,这是构造vector的正确方法吗?我检查了STL文件,那里没有提到,可以吗?

而且,iarr数组包含10个元素,我应该使用ivector(iarr, iarr+9)吗?

最佳答案

是的,这是允许的,是的,您做对了。

您正在调用此模板化构造函数:

template<class InputIterator>
   vector(
      InputIterator _First,
      InputIterator _Last
   );

模板参数InputIteratorint*(这是表达式iarriarr + 10的类型)。

由于文档指出_Last必须指向范围中最后一个元素之外的一个元素,因此+ 10也可以正确复制数组中的所有10个元素(iarr + 9指向最后一个元素,iarr + 10指向最后一个元素之后的元素)。

07-26 09:41