I'm not trying to discount what LB said; he has a point; whenever you can benefit from using the STL or anything standard provided to you, you should. Especially at the beginner stage this is important to learn. This means understanding the algorithms behind the different data structures offered to you and the time and space complexities / advantages. This is really fundamental, and if nothing else, you should know these things.
But technically every piece of logic that describes a process is an algorithm. Programs are chock full of them. When the choice of algorithm will have a real impact on the performance of your program, if possible, you should always do your research and find the best choice of existing algorithm.
For me it is boring. I like to reinvent the wheel always. I am quick and successful as a programmer, but I find when it comes to serious algorithmic challenges, my quick and dirty solutions are dwarfed by those who have solved the same problems before me.
Games development is particularly fun because you have a chance to think of some creative behavior or challenge that hasn't been yet created exactly the same way.
Doing real research in algorithms I think is tough because it is difficult to improve upon what already exists. But it seams that there is a lot of room still to develop parallel versions of existing algorithms, or new algorithms that can exploit massive parallelism.
One day of course they will master quantum computing and efficiency will hardly matter; your passwords will need to be 1000 characters long and performance for anything else but cracking codes and encrypting codes will be moot.
if ( ! ! ! ! ! ! ! ! ! ! 1 )
std::cout << ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 1 << std::endl;
If you want to look up a good algorithm that isn't standard in C++, check out union find.
For game development, I think you need to be more specific to get good answers.