我有一个关于C ++的代码,我必须在PHP上重写。 奇怪的事情发生在我身上,因为我是PHP程序员并且不熟悉C ++。 这是代码:
#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 :(得分:2)
C ++&#39; unordered_set
不允许重复元素。由于您正在推送counter
和counter+1
,因此您通常会尝试将相同的元素推送两次,其中一次会被拒绝。
如果您希望获得与PHP类似的行为,请使用std::vector
代替emplace_back
(或push_back
)来添加元素。
如果你想采用其他方式,那么在PHP中你可以使用array_unique