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

发布于 2024-07-12 11:05:07 字数 339 浏览 4 评论 0原文

我想做这样的事情:

container::iterator it = NULL;

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

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


}

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

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

I would like to do something like this:

container::iterator it = NULL;

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

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


}

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

But I can't create and initialise an iterator to NULL. Is there some way I can do this? Ideally I would just create and assign the iterator in the switch, but then it would go out of scope immediately.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

萌吟 2024-07-19 11:05:07

您根本不需要初始化它,因为迭代器是可默认构造的。

You just needn't initialize it at all, because iterators are DefaultConstructible.

厌味 2024-07-19 11:05:07

您需要做的就是更改

container::iterator it = NULL;

container::iterator it;

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

All you should need to do is change

container::iterator it = NULL;

to

container::iterator it;

and I think your code will work as intended.

何必那么矫情 2024-07-19 11:05:07

您实际上需要一个范围,而不仅仅是开始迭代器。 请注意,您无法比较来自不同容器的迭代器,因此您最好选择范围,而不是迭代器。 您可以使用 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 )
{
    ...
}

You actually need a range, not just begin iterator. Note, you can't compare iterators from different containers, so you better off selecting the range, not the iterator. You can use Boost.Range to achieve it:

#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 )
{
    ...
}
撩起发的微风 2024-07-19 11:05:07

当循环测试结束时,您应该构造它来计算 itEnd 的值。

As the loop tests for end, you should construct it to value what itEnd values.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文