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