在第一个语句中,it
被取消引用为0,因为向量中的元素1是0.在我的第二个if语句中,我想在取消引用之前增加it
它
int function(vector<int>& vec){
for (auto it = vec.begin() + 1; it != vec.end(); ++it){
if (*it == 0)
{
cout << "element 1 = 0" << endl;
if (*(it +1) && *(it +2) == 0)
cout << "element 2 and 3 = 0";
return 0;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int>grid = { 0, 0, 0, 0, 5, 2, 2, 2, 2 };
function(grid);
输出:
元素1 = 0
目标输出:
element 1 = 0
element 2 and 3 = 0
答案 0 :(得分:3)
如果要检查两个元素是否等于零,则需要使用:
if (*(it +1) == 0 && *(it +2) == 0)
而不是:
if (*(it +1) && *(it +2) == 0)
对迭代器进行递增或取消引用没有问题,因为vector
的迭代器是随机访问的,这允许使用it + n
递增它们。
您的代码中还存在一个问题,即递增迭代器可能会超过最后一个元素,这会导致未定义的行为。