在c ++中检查if条件中的向量位置范围

时间:2018-05-04 19:44:55

标签: c++ qt

我希望你帮助解决一个我认为非常基本的问题,但我无法找到相关内容,或者我没有使用正确的关键字。所以,就是这样。

我有0和1的向量,我正在寻找一种方法来检测第一个位置,其中一个在6个位置之后为零。为此我有一个用于解析向量的for循环和一个用于检查当前位置的7个条件以及之前的6个位置。我的代码是:

QVector<int> myV(300);
for (int i=0; i<100; i++){
    myV[i]=0;
}
for (int i=100; i<120; i++){
    myV[i]=1;
}
for (int i=120; i<300; i++){
    myV[i]=0;
}

for (int i=0; i<myV.size(); i++)
{

    if (myV[i]==1 && myV[i-1]==0 && myV[i-2]==0 && myV[i-3]==0 && 
        myV[i-4]==0 && myV[i-5]==0 && myV[i-6]==0)
    {
       cout << i << " " << myV[i] <<endl;
    }
}

我很确定还有另一种更好的方法可以做到这一点,但我无法想到某些事情。代码在Qt / c ++中。

请不要有任何想法。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用std,你可以做

const std::vector<int> v = {...};
const std::vector<int> sub = {0, 0, 0, 0, 0, 0, 1};

auto it = std::search(v.begin(), v.end(), sub.begin(), sub.end());
if (it != v.end()) {
     std::cout << std::distance(v.begin(), it) << std::endl;
}

在C ++ 20中,您甚至可以(或使用其他搜索者)。

auto it = std::search(v.begin(), v.end(), 
                      std::boyer_moore_searcher(sub.begin(), sub.end()));