C++中如何将迭代器作为函数的默认参数使用
小弟刚开始学迭代器,请问各位大侠,STL中的迭代器能不能作为函数的默认参数来使用?也就是在声明函数时给迭代器变量赋一个初值,如果使用指针的话我可以p=NULL,但是迭代器...
小弟刚开始学迭代器,请问各位大侠,STL中的迭代器能不能作为函数的默认参数来使用?也就是在声明函数时给迭代器变量赋一个初值,如果使用指针的话我可以p=NULL,但是迭代器终究不是指针,it=NULL,VS就会报错。
luo_xuewu说的方法也不错,虽然确实有所缺陷,但是已经可以满足我的需求了。不过besthelp说的与我所想到的一样,所以分数就给他了。 展开
luo_xuewu说的方法也不错,虽然确实有所缺陷,但是已经可以满足我的需求了。不过besthelp说的与我所想到的一样,所以分数就给他了。 展开
3个回答
展开全部
可以啊,迭代器实际上是一个嵌套的类型,由于它没有带一个指针参数并且允许隐式转换的构造函数,当然不能赋以指针值.但可以调用它的默认构造函数作为参数的默认值,如:
void f(std::vector<int>::iterator iter = std::vector<int>::iterator())
{
}
但话说回来,这样又有什么用呢?使用默认构造函数定义的迭代器,结果是未定义的.而且迭代器的比较操作符内部会断言两个迭代器是否是属于同一个容器,也就是说你不能像ptr == NULL判断指针是否有效来判断迭代器(ivec.begin() == iter).所以迭代器不应该使用默认值,在这一点上迭代器是不如指针灵活.
void f(std::vector<int>::iterator iter = std::vector<int>::iterator())
{
}
但话说回来,这样又有什么用呢?使用默认构造函数定义的迭代器,结果是未定义的.而且迭代器的比较操作符内部会断言两个迭代器是否是属于同一个容器,也就是说你不能像ptr == NULL判断指针是否有效来判断迭代器(ivec.begin() == iter).所以迭代器不应该使用默认值,在这一点上迭代器是不如指针灵活.
展开全部
额。这个。你传入迭代器指针就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() );
}
如 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() );
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如 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() );
}
写个简单的例子:
#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() );
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询