我希望你帮助解决一个我认为非常基本的问题,但我无法找到相关内容,或者我没有使用正确的关键字。所以,就是这样。
我有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 ++中。
请不要有任何想法。
提前谢谢。
答案 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()));