Вот демонстрационная программа, которая показывает, как вы можете удалить элементы вектора в диапазоне ( a, b )
.
#include <iostream>
#include <vector>
#include <tuple>
#include <iterator>
#include <algorithm>
int main()
{
std::vector<int> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << '\n';
int a = 7, b = 2;
std::tie( a, b ) = std::minmax( { a, b } );
auto inside_range = [&]( const auto &item )
{
return a < item && item < b;
};
v.erase( std::remove_if( std::begin( v ), std::end( v ), inside_range ),
std::end( v ) );
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
Его вывод
0 1 2 3 4 5 6 7 8 9
0 1 2 7 8 9
Вместо использования std:: minmax и std :: tie для порядка a и b, вы можете просто написать условие как
auto inside_range = [&]( const auto &item )
{
return a < item && item < b || b < item && item < a;
};
Что касается вашего кода, то условие в операторе if
if ( a < *p < b || a > *p < b) {
имеет видневерно, Вы имеете в виду
if (a < *p && *p < b || b < *p && *p < a ) {