我用C ++编写了一个示例代码来检查向量中的元素:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> myVec;
myVec.push_back(1);
myVec.push_back(2);
myVec.push_back(3);
myVec.push_back(4);
vector<int>::iterator it = NULL; // compilation error
for(it = myVec.begin(); it != NULL; it++) // compilation error
{
if((*it == 3)
{
cout << "3 is found\n";
break;
}
}
if(it == NULL) // compilation error
{
cout << "3 is not found\n";
}
return 0;
}
在编译此代码时,我在代码中标记为注释的以下行中收到编译错误。
我已经读过,迭代器只是指针应该如何行走的包装器。那么,为什么迭代器不能设置或与NULL比较?
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
您应该将it
与myVec.end()
进行比较。这就是矢量迭代器的工作方式。
所以,
vector<int>::iterator it = NULL; // compilation error
for(it = myVec.begin(); it != NULL; it++) // compilation error
...
if(it == NULL) // compilation error
变为
vector<int>::iterator it = myVec.begin();
for (; it != myVec.end(); it++)
...
if (it == myVec.end())
或
auto it = myVec.begin();
for (; it != myVec.end(); it++)
...
if (it == myVec.end())
答案 1 :(得分:1)
您应该将其与myVec.end()
进行比较,而不是NULL
。
Iterator是一个类,而不是指针。因此将它与NULL
进行比较毫无意义。您可以在此处查看:iterator
答案 2 :(得分:1)
我已经读过,迭代器只是指针应该如何行走的包装器。那么,为什么迭代器不能设置或与NULL比较?
迭代器不是指针的“包装器”。但是让我们假装它。这是否意味着它可以与NULL
进行比较?
让我们退后一步,想一想其他东西的“包装”,比如int
:
struct WrapperOfInt
{
int x;
};
然后实例化它:
WrapperOfInt w;
那么你可以将它与int
进行比较吗?
w == 1;
不,你不能。 WrapperOfInt
不是int
期。你无法比较它们。
通过类比,即使迭代器是指针的包装,它也不是指针。您无法将其与NULL
进行比较。