The best one that I've used is the one built into Visual Studio. I'd like to have something like that for programming in the free world. It's got colorful syntax highlighting, auto-indent, search and replace using regular expressions, like every other code editor, but it's syntax checking, code completion, context help are particularly nice.
The only thing missing, that I've seen and used in other IDEs is refactoring--particularly an intelligent renamer--and I've only seen that in IDEs for other languages. Notably Java, using NetBeans or Eclipse, but their C/C++ tools don't do refactoring either.
For Linux use, or for something that just pops up quicker than VS2008 on windows, I use Code::Blocks. It's C/C++ specific, works with a number of compilers, and runs everywhere. It's most glaring lack is a good code reformatter. It's got one, but it's got a choice of one style (something called "AStyle", that I don't care for) and has no controls at all.
For plain text under Windows, I use the shareware (yes, I paid for it!) TextPad, but there are free tools now like Notepad++ and Notepad2. Like the others (but not the original Notepad that they all take their names from) it does a good job of syntax highlighting for C/C++, and a number of other languages too. TextPad is not really a code editor, though, so there's no code completion or syntax help, and no code reformatting at all. It also does NOT support Unicode, so if you use much non-ASCII text in strings you might want to consider Notepad++ or Notepad2, which do.