我写了一个程序,可以按名称查找副本。 例如:假设我们在各种目录中都有文件a.txt,b.txt,c.txt。我需要查找仅按名称复制的文件。输出将是各种目录中的文件名。< / p>
代码:
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循环是递归的,但是它正确打印了重复的文件名。谢谢。
答案 0 :(得分:0)
这个循环对我来说很奇怪:
tempit=it;
while((++tempit)!=v.end() && tempHolder==(*(++it)))
{
isDuplicate=1;
}
如果it
是容器的最后一个有效迭代器,则第一个条件将为false,因此短路评估将导致永远不会执行++it
。循环将无限期地运行。
while((++tempit)!=v.end() && tempHolder==*tempit)
应该有用。
答案 1 :(得分:0)
while((++tempit)!=v.end() && tempHolder==(*(++it)))
你操纵你在大循环(it)中使用的迭代器 更好:
while((++tempit)!=v.end() && tempHolder==(*tempit))
如果我正确理解您的代码。
编辑:您的it
需要在第一个循环中递增。
我个人宁愿写这样的东西:
while ((++tempit)!= v.end())
if (*tempit = *it)
{
duplicate = true;
break;
}