Проверка диапазона позиций вектора в условии if в c ++ - PullRequest
0 голосов
/ 04 мая 2018

Мне нужна ваша помощь по проблеме, которая, я думаю, очень проста, но я не могу найти что-то относительное или, возможно, я не использую правильные ключевые слова. Итак, вот оно.

У меня есть вектор с нулями и единицами, и я ищу способ обнаружить первую позицию с одной после 6 позиций с нулем. Для этого у меня есть цикл for для разбора вектора и if с 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 голосов
/ 05 мая 2018

С помощью 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 вы можете даже (или использовать другой Searcher).

auto it = std::search(v.begin(), v.end(), 
                      std::boyer_moore_searcher(sub.begin(), sub.end()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...