我想做这样的事情:
container::iterator it = NULL;
switch ( eSomeEnum )
{
case Container1:
it = vecContainer1.begin();
break;
case Container2:
it = vecContainer2.begin();
break;
...
}
for( ; it != itEnd ; ++it )
{
..
}
但我无法创建并初始化迭代器为NULL。有什么方法可以做到这一点吗?理想情况下,我只是在交换机中创建并分配迭代器,但它会立即超出范围。
答案 0 :(得分:11)
你根本不需要初始化它,因为迭代器是DefaultConstructible。
答案 1 :(得分:6)
您需要做的就是改变
container::iterator it = NULL;
到
container::iterator it;
我认为您的代码可以正常运行。
答案 2 :(得分:3)
你实际上需要一个范围,而不仅仅是开始迭代器。注意,您无法比较来自不同容器的迭代器,因此最好选择范围,而不是迭代器。您可以使用Boost.Range来实现它:
#include <boost/range.hpp>
#include <boost/foreach.hpp>
boost::iterator_range< container::iterator > r;
switch( e )
{
case Container1:
r = boost::make_iterator_range( vecContainer1 );
break;
case Container2:
r = boost::make_iterator_range( vecContainer2 );
break;
...
}
BOOST_FOREACH( container::value_type value, r )
{
...
}
答案 3 :(得分:1)
当循环测试结束时,您应该构造它以评估itEnd
值。