I'm writing a piece of C++ that checks to see whether particular elements of a vector return true, and uses `remove_if()` to remove them if not. After this, I use `vector.size()` to check to see if there are any elements remaining in the vector, and then return the function if not.

At the moment, I do `vector.erase()` after `remove_if()`, as it doesn't actually reduce the size of the vector. However, this code needs to run fast, and recursively changing the size of a vector in memory is probably not ideal. However, returning if the vector is zero (instead of running the rest of the function) probably also saves time.

Is there a nice way to check how many elements remain in the vector without erasing?

here's the code:

```
  auto remove = remove_if(sight.begin(), sight.end(), [](const Glance *a) {
    return a->occupied;
  }); 

  sight.erase(remove, sight.end());

  if (sight.size() == 0) {
    // There's nowhere to move
    return;
  }

```

EDIT:
thanks for the help + the guidance. From the answers it's clear that the wording of the question isn't quite correct: `erase()` doesn't change the size of the vector in memory, but the capacity. I had mis-remembered the explanation from [this post](https://stackoverflow.com/questions/19296958/difference-between-stdremove-and-erase-for-vector), which nicely articulates why `erase()` is slower than `remove()` for multiple removals (as you have to copy the location of the elements in the vector multiple times).

I used Instruments to benchmark the code I had originally against Johannes' suggestion, and the difference was marginal, though Johannes' was consistently slightly faster (~9.8% weight vs ~8.3% weight for the same code otherwise). The linked article should explain why. ✨