C ++ unordered_set insert insert Переполнение стека

У меня есть код на 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

Решение

C ++ ‘s unordered_set не позволит дублировать элементы. Так как вы толкаете counter а также counter+1 Например, вы обычно пытаетесь нажать один и тот же элемент дважды, и один из этих случаев он отклоняется.

Если вы хотите иметь поведение, подобное PHP, используйте std::vector вместо этого с emplace_back (или же push_back) добавить свои элементы.

Если вы хотите пойти другим путем, то в PHP вы можете использовать array_unique

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]