微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环仅在迭代器之一到达末尾后退出这里有什么问题?

如何解决循环仅在迭代器之一到达末尾后退出这里有什么问题?

我在 C++ 中有一个简单的 for 循环

int makeAnagram(string a,string b)
{
  int deletionCnt = 0;
  sort(a.begin(),a.end());
  sort(b.begin(),b.end());

  string::iterator itrA = a.begin();
  string::iterator itrB = b.begin();

  for (itrA; (itrA != a.end() && itrB != b.end()); itrA++)
  {
    if (*itrA < *itrB)
    {
      deletionCnt++;
    }
    else if (*itrA == *itrB)
    {
      itrB++;
    }
    else if (*itrA > *itrB)
    {
      deletionCnt++;
      itrB++;
    }
    else if (itrA == a.end())
    {
      deletionCnt += (b.end() - itrB);
      itrB = b.end();
    }
    else if (itrB == b.end())
    {
      deletionCnt += (a.end() - itrA);
      itrA = a.end();
    }
    else
    {
      cout << "Additional condition not checked : ";
    }
  }

  cout << "itrA is " << *itrA << ","
       << " itrB is " << *itrB << endl;
  return deletionCnt;
}

此循环直到 itrAitrB 都到达终点时才会运行,而是在其中一个到达终点时循环结束。

我的理解是两个迭代器都应该指向结尾,因为这是循环条件。

有人可以解释一下吗?

谢谢你,干杯!

解决方法

如果 itrA 到达终点,则条件 (itrA != a.end() 为真。

如果 itrA 确实到达终点,则 (itrA == a.end() 为真。

A 和 B 到达终点的正确条件是 (itrA == a.end() && itrB == b.end())

,

您的代码运行正常。循环终止的条件是itrA != a.end() && itrB != b.end()。如果任一迭代器已到达终点,and 子句将返回 false,循环将终止。

如果您希望循环在两个迭代器都结束时终止,您可以使用像 !(itrA == a.end() && itrA == a.end()) 这样的条件。请注意,如果您继续将任一迭代器移出范围,这将不起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。