std::remove_ifは条件を満たす(述語が真を返す)要素を実際削除するわけではなく、「削除する要素を詰めて、サイズが縮んだコンテナの新しい終端イテレータを返す」だけなので、その後の要素の削除は自分でやらないといけません。
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> v = {1,2,3,4,5,6,7};
// "1 2 3 4 5 6 7"
for(auto i=v.begin();i!=v.end();++i)
{std::cout << *i << " ";}
std::cout << std::endl;
auto itrNewEnd = std::remove_if(v.begin(),v.end()
,[](int i)->bool
{ return 3<=i&&i<=5; });
v.erase(itrNewEnd,v.end());
// "1 2 6 7"
// 上記のv.erase()をコメントアウトすると "1 2 6 7 5 6 7"
for(auto i=v.begin();i!=v.end();++i)
{std::cout << *i << " ";}
std::cout << std::endl;
return 0;
}