istream_iterator是个类,为什么可以直接当做vector构造函数的参数使用?

alvinliu1976 2007-04-04 12:00:59
如题。按理说vector构造函数的参数是个const_iterator,是个类中的定义变量类型,不是个类类型啊?为什么istream_iterator可以直接做实参,有隐式类型转换吗?istream_iterator中也好像没有重载转换运算符啊?
...全文
238 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
istream_iterator这个是迭代器,
匹配的是
template<class InputIterator>
vector(
InputIterator _First,
InputIterator _Last
);
这个
taodm 2007-04-04
  • 打赏
  • 举报
回复
这么大大的template<class InputIterator>没看见么。
模板还没学过?
alvinliu1976 2007-04-04
  • 打赏
  • 举报
回复
istream_iterator<int> infine(cin);
istream_iterator<int> eos;
vector<int> temparr(infine,eos);
上述代码在VC6.0下给出类型不能匹配的错误,在VC2005下没问题。我的问题是:vector的构造函数这里的参数只能是int的指针;而代码中直接把istream_iterator<int> 这个类对象给了形参。这个类对象只是istream_iterator<int>的一个对象,不是int的指针啊?除非进行重载转换运算符。但是我在VC2005 MSDN下找不到说明。
alvinliu1976 2007-04-04
  • 打赏
  • 举报
回复
所有构造函数的都看了啊,template<class InputIterator>
vector(
InputIterator _First,
InputIterator _Last
);
template<class InputIterator>
vector(
InputIterator _First,
InputIterator _Last,
const Allocator& _Al
);

只可能匹配这两个啊
taodm 2007-04-04
  • 打赏
  • 举报
回复
你知道vector有多少个构造函数吗?
alvinliu1976 2007-04-04
  • 打赏
  • 举报
回复
template<class _Iter>
vector(_Iter _First, _Iter _Last)
: _Mybase()
{// construct from [_First, _Last)
_Construct(_First, _Last, _Iter_cat(_First));
}
刚才终于找到答案了,这是匹配的是这个构造函数,注意这个构造函数是个函数模版,真是厉害,类模版里头又套一个函数模版,我都晕了。还有更晕的,这个函数模版中的_Construct函数也不是一个实在函数,也是类模版中的函数模版。也就是构造函数的模版中调用了一个模版函数。请大家看看是不是这样的。注:以上是在VC2005平台下,VC6.0不行。

64,662

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧