C++ C++;如何使用的任意_查找函数中的重复数?

C++ C++;如何使用的任意_查找函数中的重复数?,c++,C++,这是我的密码: #include <iostream> #include <algorithm> using namespace std; void input_guess_number(int guess_number[]){ int num, check = 0; for(int i = 0; i < 4; i++){ cout << "please enter no." << i+1 <&l

这是我的密码:

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

void input_guess_number(int guess_number[]){

    int num, check = 0;

    for(int i = 0; i < 4; i++){

        cout << "please enter no." << i+1 << " number (0-9) and press enter: ";
        cin >> num;

        if (any_of(begin(guess_number), end(guess_number), [=](int n){return n == num;})){
            check = 1;
        }
        else{
            check = 0;
        }

        if (check == 1){
            cout << "\nyou cannot use this number. try another one!\n\n";
            i--;
        }
        else if (num >=0 && num < 10){
            guess_number[i] = num;
        }
        else{
            cout << "\nwrong number! please choose a number from 0 to 9.\n\n";
            i--;
        }

    }

    cout << "\nYour number is: ";

    for(int i = 0; i < 4; i++){
        cout << guess_number[i];
    }
}

int main()
{
    int guess_number[4] = {100, 100, 100, 100};
    input_guess_number(guess_number);
}
#包括
#包括
使用名称空间std;
无效输入猜数(整数猜数[]){
int num,check=0;
对于(int i=0;i<4;i++){

cout问题在于,一旦将数组传递给函数,它就会衰减为指向其第一个元素的指针。您不能真正使用指针的
begin
end
。而是传递数组的大小(元素数)将函数作为额外参数,并使用
guess\u number
作为开始迭代器,使用
guess\u number+size\u作为结束迭代器


或者开始对数组使用。

问题是,一旦将数组传递给函数,它将衰减为指向其第一个元素的指针。您不能真正使用指针的
begin
end
。而是传递数组的大小(元素数)将函数作为额外参数,并使用
guess\u number
作为开始迭代器,使用
guess\u number+size\u作为结束迭代器

或者开始为您的阵列使用

有人知道如何改进吗?谢谢

是,使阵列的长度可通过模板导出

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

template<std::size_t Length>
void input_guess_number(int (&guess_number)[Length])
{

    int num, check = 0;

    for(int i = 0; i < Length ; i++){

        cout << "please enter no." << i+1 << " number (0-9) and press enter: ";
        cin >> num;

        if (any_of(begin(guess_number), end(guess_number), [=](int n){return n == num;})){
            check = 1;
        }
        else{
            check = 0;
        }

        if (check == 1){
            cout << "\nyou cannot use this number. try another one!\n\n";
            i--;
        }
        else if (num >=0 && num < 10){
            guess_number[i] = num;
        }
        else{
            cout << "\nwrong number! please choose a number from 0 to 9.\n\n";
            i--;
        }

    }

    cout << "\nYour number is: ";

    for(int i = 0; i < 4; i++){
        cout << guess_number[i];
    }
}

int main()
{
    int guess_number[4] = {100, 100, 100, 100};
    input_guess_number(guess_number);
}
有人知道如何改进吗?谢谢

是,使阵列的长度可通过模板导出

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

template<std::size_t Length>
void input_guess_number(int (&guess_number)[Length])
{

    int num, check = 0;

    for(int i = 0; i < Length ; i++){

        cout << "please enter no." << i+1 << " number (0-9) and press enter: ";
        cin >> num;

        if (any_of(begin(guess_number), end(guess_number), [=](int n){return n == num;})){
            check = 1;
        }
        else{
            check = 0;
        }

        if (check == 1){
            cout << "\nyou cannot use this number. try another one!\n\n";
            i--;
        }
        else if (num >=0 && num < 10){
            guess_number[i] = num;
        }
        else{
            cout << "\nwrong number! please choose a number from 0 to 9.\n\n";
            i--;
        }

    }

    cout << "\nYour number is: ";

    for(int i = 0; i < 4; i++){
        cout << guess_number[i];
    }
}

int main()
{
    int guess_number[4] = {100, 100, 100, 100};
    input_guess_number(guess_number);
}

@Rakete1111你是对的,我错了。抱歉搞混了。谢谢。:)在将其修改为:if(任意的(猜数,猜数+4,[=](int n){return n==num;})后,效果很好。@Rakete1111你是对的,我错了。抱歉搞混了。谢谢。:)在将其修改为:if(任意的(猜数,猜数+4,[=](int n){return n==num;})谢谢。这也是工作,它似乎使用C++的核心知识。我将尝试更多地了解这个。@ TANKVVV增加了另一个版本,使用<代码> STD::向量< /代码>。它还计算剩余的(未使用的)。数字,并在输出中作为压缩范围序列表达出来。你可能会发现它很有指导性。很好,非常感谢。)这一个有很多我以前不知道的东西。谢谢。这也是可行的,而且似乎使用了C++的核心知识。我将尝试更多地了解这个。“TANKVVV增加了另一个版本,使用<代码> STD::向量< /代码>。。它还计算剩余的(未使用的)数字,并将它们在输出中表示为压缩范围序列。我想你可能会觉得它很有启发性。很好,非常感谢。:)这个数字有很多我以前不知道的东西。