如何检查C ++数组中元素的存在

时间:2015-05-21 04:07:40

标签: c++ arrays search

关于如何编写一些代码来检查2D数组中的任何位置是否包含某个变量,我有点困惑。

设想一个8x8的2D数组,每个元素的值都是-1,0或1.我想只在数组中找到-1和1时继续运行代码。

我的问题是我只知道如何遍历整个数组,这样我就可以得到最后一个元素的值并测试它是-1还是1,而不是测试 any 是1或-1。

我希望下面的代码说明了我要做的事情。感谢。

for(int x=0; x<8; x++)
{
    for(int y=0; y<8; y++)
    {
        if(array[x][y] == 1)
        {
            stop checking
            oneExists = true;
        }
        if(array[x][y] == -1)
        {
            stop checking
            minusoneExists = true;
        }
        else
        {
            oneExists = false;
            minusoneExists = false;
        }
    }

    if(oneExists==true & minusoneExists==true)
    {
        return true;
    }
    else
    {
        return false;
    }
}

4 个答案:

答案 0 :(得分:2)

下面的内容可能会起到作用:

oneExists = false;
minusoneExists = false;

for(int x=0; x<8 && ! (oneExists && minusoneExists); x++)
{
    for(int y=0; y<8  && ! (oneExists && minusoneExists); y++)
    {
        if(array[x][y] == 1)
        {
            oneExists = true;
        }
        if(array[x][y] == -1)
        {
            minusoneExists = true;
        }
    }
}

return oneExists && minusoneExists;

答案 1 :(得分:1)

这个怎么样:

bool oneExists = false;
bool minusoneExists = false;
for(int x=0; x<8; x++)
{
    for(int y=0; y<8; y++)
    {
        if(array[x][y] == 1)
        {
            oneExists = true;
        }
        else if(array[x][y] == -1)
        {
            minusoneExists = true;
        }
        if(oneExists && minusoneExists) return true;
    }
}
return false;

答案 2 :(得分:0)

怎么样。

    for(int x=0; x<8; x++)
    {
        bool flag=true;
        for(int y=0; y<8; y++)
        {
            if(array[x][y]==0)
            {
                flag=false;
                break;
            }
        }

        if(!flag)
            return false;

    }
    return true;

答案 3 :(得分:0)

使用标准库:

bool contains(const int (&m)[8][8], int value)
{
    return std::any_of(std::begin(m), std::end(m), [value](const auto&a)
    {
        return std::any_of(std::begin(a), std::end(a), [value](int e)
        {
            return e == value;
        });
    });
}

bool contain_one_and_minus_one(const int (&m)[8][8])
{
    return contains(m, 1) && contains(m, -1);
}

Live Demo