C++ - 在vector(或其他容器)构造函数中使用期望类型为Iterator的数组/指针.怎么可能?

Ely*_*Ely 0 c++ arrays pointers vector

下面的文字来自C++在线课程.它说的是vector类的构造函数

 template <class InputIterator>
          vector ( InputIterator first, InputIterator last, const Allocator& = Allocator() );
Run Code Online (Sandbox Code Playgroud)

可以接收指针作为first(InputIterator first)和第二个参数(InputIterator last).

下一个构造函数使用迭代器来初始化自身.它将创建一个带有从第一个(包括)到最后一个(不包括)的值副本的向量.在最典型的情况下,此构造函数使用现有集合中的元素创建新向量.但是由于迭代器被定义为一组操作而不是某种类型,因此也可以使用普通指针.这句话得出的结论是,您可以使用普通的C++数组来初始化集合.事实上,你可以.

#include <vector>
#include <iostream>

using namespace std;

int main()
{
    int a1[]={1,2,3,4,5,6,7,8,9,10};
    //first one
    vector<int> v1(a1, a1+10);
    cout<<"Size (v1):  "<<v1.size()<<endl;
    for(unsigned i = 0; i < v1.size(); ++i)
    {
        cout<< v1[i]<<" ";
    }
    cout<<endl;
    //second one;
    vector<int> v2(a1+5,a1+10);
    cout<<"Size (v2):  "<<v2.size()<<endl;
    for(unsigned i = 0; i < v2.size(); ++i)
    {
        cout<< v2[i]<<" ";
    }
    cout<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以习惯这个,但我真的不明白为什么它是可能的.我想了解这种技巧.

我在这种情况下的问题(参见代码)是怎么可能只是放一个数组地址而不是迭代器?

在上面的代码中,类型的元素int *被放置为类型的参数InputIterator.这让我很困惑.

Bru*_*evy 6

所有的故事都是关于构造函数对迭代器的期望.它希望能够增加它(使用++),以使其顺序(使用*).Interator只是一个重载++和*运算符的类,或者是一个自然支持这两个操作的基本指针类型.