使用STL迭代器而不初始化它

时间:2009-01-22 16:30:35

标签: c++ stl scope iterator

我想做这样的事情:

container::iterator it = NULL;

switch ( eSomeEnum )
{
case Container1:
it = vecContainer1.begin();
break;

case Container2:
it = vecContainer2.begin();
break;
...


}

for( ; it != itEnd ; ++it )
{ 
..
}

但我无法创建并初始化迭代器为NULL。有什么方法可以做到这一点吗?理想情况下,我只是在交换机中创建并分配迭代器,但它会立即超出范围。

4 个答案:

答案 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值。