簡體   English   中英

按名稱查找重復項時出錯

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM