2016-12-05 88 views
0

我在C++上有一個代碼,我必須在PHP上重寫。 奇怪的事情發生在我身上,因爲我是PHP程序員,不太瞭解C++。 這是代碼:代碼C++ unordered_set insert insert PHP

#include <iostream> 
#include <unordered_set> 
using namespace std; 

int func(int choice) { 

    unordered_set<int> hset; 
    for (int counter = 0; counter < choice; counter++) { 
     hset.insert(counter); 
     if (counter % 2 == 0) { 
      hset.insert(counter); 
      hset.insert(counter + 1); 
     } 
    } 
    return hset.size(); 
} 

int main(int argc, char** argv) { 
    cout << func(561); 
    return 0; 
} 

輸出是:562;

我已經寫PHP代碼:

function func($choice) { 

$hset = []; 

for ($counter = 0; $counter < $choice; $counter++) { 
    array_push($hset, $counter); 
    if ($counter % 2 == 0) { 
     array_push($hset, $counter); 
     array_push($hset, $counter + 1); 
    } 
} 

    return count($hset); 
} 

echo func(561); 

它返回1123。請幫忙。

+0

?你知道它的目的是什麼嗎?我問的原因是因爲你將一堆重複元素插入到集合中,而'unordered_set'只保留每個獨特元素的1個副本。 –

+0

@BenjaminLindley這是問題:OP(不可否認)不太瞭解C++。你有一點:原始代碼的特定部分沒有意義。 –

+0

@MrLister:是的,我只是好奇他是什麼讓他認爲'unordered_set'是這個工作的正確容器(無論那個工作是什麼)。它通常不是你學習C++時學到的第一批容器之一,大多數人確實瞭解的第一個容器('std :: vector')就是這個工作的正確容器。 –

回答

2

C++的unordered_set將不允許重複的元素。由於您推送的是countercounter+1,因此您通常會嘗試推送相同的元素兩次,並且其中一次被拒絕。

如果您想要具有與PHP類似的行爲,請改爲使用std::vector,使用emplace_back(或push_back)添加元素。

如果你想要去的其他方式,那麼在PHP中,你可以你爲什麼要使用`unordered_set`使用array_unique

+0

非常感謝!我已經使用array_unique並提供幫助 – Buglinjo