2016-07-12 3 views
0

Есть ли какой-либо прямой способ нахождения, если определенный набор значений (шаблон) присутствует в контейнере std::vector?Как найти шаблон в std :: vector

Скажем, у меня есть этот контейнер данных:

std::vector<int> data { 0x00, 0xff, 0x00, 0x11, 0x12, 0x13, 0x14, 0x15 }; 

И эта модель описана с использованием другого std::vector контейнера:

std::vector<int> pattern { 0x00, 0xff, 0x00 }; 

Я хочу:

  • Логического значения, представляет наличие рисунка.

  • В конце концов, индекс, на котором начинается шаблон.

+1

Что-то с лямбдой и 'std :: find()' вероятно. –

+0

Пожалуйста, покажите ввод и желаемый результат. –

+1

@VaibhavBajaj Нам дали ввод и желаемый результат, хотя? – CJxD

ответ

10

Вы можете использовать std::search.

#include <iostream> 
#include <vector> 
#include <algorithm> 

int main() { 
    std::vector<int> data {0x00, 0xff, 0x00, 0x11, 0x12, 0x13, 0x14, 0x15}; 
    std::vector<int> pattern {0x00, 0xff, 0x00}; 

    auto res = std::search(std::begin(data), std::end(data), std::begin(pattern), std::end(pattern)); 
    if(res == std::end(data)) { 
     std::cout << "Couldn't find it.\n"; 
    } else { 
     std::cout << "Found it.\n"; 
    } 
} 

Здесь res итератор, указывающий на начало последовательности. Если он равен концу стога сена, не было иглы.

Смежные вопросы