The whole purpose of STL (and the MFC container classes, and almost any other library I know for that matter) is to provide the programmer with a toolkit of adequately tested classes/functions that perform well under most circumstances limiting worst-case scenario's as much as possible, and providing a workable tradeoff between speed and memory usage.

And as with any tradeoff, it's sometimes not going to be good enough. I have had my share of problems where 'generic' solutions just wouldn't do. Reinventing the wheel (but with added grip and better profile for wet surface and a chery on top) is sometimes necessary.

It's hard to do decent benchmarking. Last time you checked... how many times did you actually had to write real code that did:
Code:
for (i=0; i<1000000; ++i)
    {
        li.push_back(i);
    }
;-)