C++中如何将迭代器作为函数的默认参数使用

小弟刚开始学迭代器,请问各位大侠,STL中的迭代器能不能作为函数的默认参数来使用?也就是在声明函数时给迭代器变量赋一个初值,如果使用指针的话我可以p=NULL,但是迭代器... 小弟刚开始学迭代器,请问各位大侠,STL中的迭代器能不能作为函数的默认参数来使用?也就是在声明函数时给迭代器变量赋一个初值,如果使用指针的话我可以p=NULL,但是迭代器终究不是指针,it=NULL,VS就会报错。
luo_xuewu说的方法也不错,虽然确实有所缺陷,但是已经可以满足我的需求了。不过besthelp说的与我所想到的一样,所以分数就给他了。
展开
 我来答
luo_xuewu
2013-01-17 · TA获得超过917个赞
知道小有建树答主
回答量:444
采纳率:0%
帮助的人:340万
展开全部
可以啊,迭代器实际上是一个嵌套的类型,由于它没有带一个指针参数并且允许隐式转换的构造函数,当然不能赋以指针值.但可以调用它的默认构造函数作为参数的默认值,如:
void f(std::vector<int>::iterator iter = std::vector<int>::iterator())
{
}
但话说回来,这样又有什么用呢?使用默认构造函数定义的迭代器,结果是未定义的.而且迭代器的比较操作符内部会断言两个迭代器是否是属于同一个容器,也就是说你不能像ptr == NULL判断指针是否有效来判断迭代器(ivec.begin() == iter).所以迭代器不应该使用默认值,在这一点上迭代器是不如指针灵活.
besthelp
2013-01-17 · TA获得超过1057个赞
知道小有建树答主
回答量:376
采纳率:100%
帮助的人:389万
展开全部
额。这个。你传入迭代器指针就OK了。初始化为NULL

如 void fun( std::vector<int>::iterator* pIter = NULL );

写个简单的例子:
#include <iostream>
#include <vector>

void f( std::vector<int>::iterator* pIter = NULL )
{
if( NULL == pIter ){
std::cout<< "invalid piter" << std::endl;
}
else{
std::cout<< *(*pIter) << std::endl;
}
}

void main()
{
std::vector<int> tmpList;
tmpList.push_back( 100 );
f(); // 默认参数 NULL
f( &tmpList.begin() );
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
韧劲9
2015-06-10 · TA获得超过9224个赞
知道小有建树答主
回答量:1638
采纳率:92%
帮助的人:352万
展开全部
如 void fun( std::vector<int>::iterator* pIter = NULL );

写个简单的例子:
#include <iostream>
#include <vector>

void f( std::vector<int>::iterator* pIter = NULL )
{
if( NULL == pIter ){
std::cout<< "invalid piter" << std::endl;
}
else{
std::cout<< *(*pIter) << std::endl;
}
}

void main()
{
std::vector<int> tmpList;
tmpList.push_back( 100 );
f(); // 默认参数 NULL
f( &tmpList.begin() );
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式