3

我想知道是否需要进行以下检查:

std::list<int> myList;
.....
for (std::list<int>::iterator itr = myList.begin(); itr != myList.end(); ++itr)
{
   if (itr != NULL) // Is This Check Necessary?
   {
      // DO SOMTHING.
   }    
}

我在一些地方看到过这个检查,我想知道这是否是必要的检查。如果列表是函数的输入,也许这个检查是必要的?

谢谢,奥弗。

4

5 回答 5

4

不,这是不必要的检查。您可能想检查*itr != nullptr列表是否包含某种指针。

于 2013-03-27T09:02:54.387 回答
2

不,这是没有必要的。我不确定它是否有效。

于 2013-03-27T09:03:04.530 回答
1

相反,您可以使用基于新范围的 for 循环 (C++11),因此您不需要处理迭代器检查。

std::list<int> YourList;
for( auto z : YourList ) {
//
std::cout << z;        // z is int
// amazing codes and fun :)
//
}
于 2013-03-27T09:05:28.507 回答
1

不需要检查。如果 myList 为空,则 myList.begin() 等于 myList.end()

于 2013-03-27T09:19:25.923 回答
1

我认为没有办法测试迭代器是否未初始化,但是您可以将迭代器初始化为容器的 end() 作为默认值。

std::list<int>::iterator itr = yourlist.end();
//
if (itr != yourlist.end())
{
    //doSomething
}
于 2013-03-27T09:33:13.907 回答