使用 STL 迭代器而不初始化它
我想做这样的事情:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您根本不需要初始化它,因为迭代器是可默认构造的。
You just needn't initialize it at all, because iterators are DefaultConstructible.
您需要做的就是更改
为
,我认为您的代码将按预期工作。
All you should need to do is change
to
and I think your code will work as intended.
您实际上需要一个范围,而不仅仅是开始迭代器。 请注意,您无法比较来自不同容器的迭代器,因此您最好选择范围,而不是迭代器。 您可以使用 Boost.Range 来实现它:
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:
当循环测试结束时,您应该构造它来计算
itEnd
的值。As the loop tests for end, you should construct it to value what
itEnd
values.