Why not `std::copy_if()` or even better
```c++
std::remove_copy(pnt_vec->begin(), pnt_vec->end(), tmp_pnt_vec->begin(), nullptr);
```

But it is strange, that copying almost all vector and remove the other should be slower than inplace copy. I understand, that the old algorithm is inefficient because of n times `pnt_vec->erase(it)` application, but did you try the following?
```c++
std::remove(pnt_vec->begin(), pnt_vec->end(), nullptr);
```