2

我想做这样的事情:

container::iterator it = NULL;

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

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


}

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

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

4

4 回答 4

11

您根本不需要初始化它,因为迭代器是 DefaultConstructible。

于 2009-01-22T16:34:27.410 回答
6

你需要做的就是改变

container::iterator it = NULL;

container::iterator it;

我认为您的代码将按预期工作。

于 2009-01-22T16:41:28.177 回答
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 )
{
    ...
}
于 2009-01-22T18:22:11.920 回答
1

当循环测试结束时,您应该构造它以评估什么itEnd值。

于 2009-01-22T17:18:58.677 回答