c++ - 循环仅在迭代器之一到达末尾后退出。这里有什么问题?
问题描述
我在 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;
}
该循环直到两者都到达终点时才运行itrA
,itrB
而是在其中一个到达终点时循环结束。
我的理解是两个迭代器都应该指向结尾,因为那是循环条件。
任何人都可以解释一下吗?
谢谢你和欢呼!
解决方案
(itrA != a.end()
如果 itrA没有到达末尾,则条件为真。
(itrA == a.end()
如果 itrA确实到达末尾,则为 true。
A和B都到达终点的正确条件是(itrA == a.end() && itrB == b.end())
推荐阅读
- scikit-learn - 从 sklearn.metrics.pairwise 导入错误 _euclidean_distances
- javascript - 如何建立直接链接,从而重置 React-router-dom 中的整个路径
- r - 如何在共享相同文件名的不同目录中合并(内部连接)数据框
- sonarqube - 不会保存任何覆盖信息,因为使用 Github 操作在我的 javascript 项目中找不到所有 LCOV 文件
- c - 使用函数指针比 switch 语句慢
- sql - Synapse SQL:将临时表合并到主表和自动增量标识
- javascript - 具有相同类的多个下拉列表+依赖选择的插件
- recurly - Recurly API:获取新订阅激活的消息
- powerbi - 为什么可以刷新数据集时出现“数据源访问错误”?
- python - 从旧照片 python open cv 中去除日晒斑