首页 > 解决方案 > 循环仅在迭代器之一到达末尾后退出。这里有什么问题?

问题描述

我在 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而是在其中一个到达终点时循环结束。

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

任何人都可以解释一下吗?

谢谢你和欢呼!

标签: c++for-loopiterator

解决方案


(itrA != a.end()如果 itrA没有到达末尾,则条件为真。

(itrA == a.end()如果 itrA确实到达末尾,则为 true。

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


推荐阅读