[英]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.