There are a lot of things you could do without interrogating the type. As Elysia suggested, keep them (smart pointers to them) in separate arrays as well as the main array. Or add a reportTime() member function, and have each type report to a singleton object that stores the total time - one for raceCars, one for crapCars.
Or if there are only ever going to be two types, maybe interrogating the type isn't so bad, but I'd still feel dirty doing it.