[英]Error while finding duplicates by name
我编写了一个程序,该程序可以按名称查找重复项。 例如:假设我们在各个目录中都有文件a.txt,b.txt,c.txt。我需要查找仅按名称重复的文件。输出将是各个目录中存在的文件名。
码:
fs::path tempHolder;
int isDuplicate=0;//To check whether duplicate or not.
vec::const_iterator tempit (v.begin());//i already have vector v which has all the filenames
for (vec::const_iterator it (v.begin()); it != v.end();)
{
tempHolder=*it;
isDuplicate=0;
tempit=it;
while((++tempit)!=v.end() && tempHolder==(*(++it)))
{
isDuplicate=1;
}
if(isDuplicate==1)
{
cout<<"Duplicate:"<<tempHolder<<endl;
}
}
问题是for循环递归进行,但可以正确打印重复的文件名。
这个循环对我来说似乎很奇怪:
tempit=it;
while((++tempit)!=v.end() && tempHolder==(*(++it)))
{
isDuplicate=1;
}
如果it
是容器的最后一个有效迭代器,则第一个条件为false,因此短路评估将导致++it
永远不会执行。 循环将无限期运行。
while((++tempit)!=v.end() && tempHolder==*tempit)
应该管用。
while((++tempit)!=v.end() && tempHolder==(*(++it)))
您可以操纵在大循环中使用的迭代器(更好):
while((++tempit)!=v.end() && tempHolder==(*tempit))
如果我正确理解您的代码。
编辑:并且您需要在第一个循环中增加it
。
我个人更愿意这样写:
while ((++tempit)!= v.end())
if (*tempit = *it)
{
duplicate = true;
break;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.