С этими определениями:
vector<char> a = {'a', 'b', 'c', 'd', 'e', 'f' /*...*/};
char ch = 'x';
Вы можете легко перейти к следующему, начиная с первого символа (+1
) и заканчивая игнорированием двух последних элементов (-2
):
if (any_of(a.cbegin()+1, a.cend()-2, [&ch](auto &x){return x==ch; }))
cout << "found !"<<endl;
else cout << "not found! "<<endl;
Вы также можете использовать более классическую std::find()
в библиотеке <algorithm>
:
if (std::find(a.cbegin(), a.cend(), ch) !=a.cend())
...
Если вы хотите начать сс заданным смещением или концом, игнорируя некоторые конечные элементы, вы можете перейти к математике итератора на итераторе начала или конца:
if (std::find(a.cbegin()+3, a.cend(), ch) != a.cend())
...
Если вы делаете это часто, и вам не интересно, где в векторе находится элементнайдено, вы могли бы рассмотреть следующую функцию:
template <class U, class W>
bool myfind (const U &v, size_t starto, size_t endo, const W& x) {
if (starto>=endo || endo>=v.size())
return false;
return std::find(v.begin()+starto, v.begin()+endo, x) != v.begin()+endo;
}
Если вы можете перейти к std::string
вместо std::vector
, вы можете использовать функцию-член find()
, которая может приниматьсмещение в качестве аргумента.