Most computer bookstores have several shelves full of introductory books on C++. C++ for Fortran Programmers, by Ira Pohl, is among the better of these. The book is well organized, and covers all of the language's most useful features without becoming bogged down in details.
After working through one of those, everyone who plans to use the language should read Effective C++ by Scott Meyers, and Algorithms, Data Structures, and Problem Solving with C++ by Mark Weiss. Effective C++ (and its companion, More Effective C++) present dozens of guidelines on how to use C++ effectively. Always making destructors virtual, for example, makes it safer and easier to create heterogeneous collections of objects, while explicitly providing a copy constructor can prevent many hard-to-find aliasing bugs.
Weiss's book on data structures is a conventional textbook, but better written and more up-to-date than most. The author covers basic structures such as arrays, stacks, and queues before moving on to trees, hash tables, skip lists, and their more complicated kin. His presentation and analysis are concise and to-the-point, and the book provides complete implementations of all of the data structures it describes.
Almost all programming books talk about design; John Lakos's Large-Scale C++ Software Design is one of the few devoted to the problems that arise in actually implementing large programs. The book discusses ways to (re-)organize source code to reduce compilation time (from several days to overnight in one case), ease maintenance, and facilitate re-use.
Musser and Saini's STL Tutorial and Reference Guide is exactly what its title implies. The first part of the book explains what the C++ Standard Template Library (STL) is trying to accomplish; the middle introduces the STL's major features, and shows how they are used, while the back of the book is a reference guide.
Austern's Generic Programming and STL Book provides an excellent introduction to generic programming by introducing the notions of concepts and models. According to Austern, "a concept describes a set of requirements on a type, and when a specific type satisfies all of those requirements, we say that it is a model of that concept." A concept is not a C++ class, function, or template; however, any of these entities can serve as a model of a concept. Using these ideas, Austern also provides a complete reference for the STL.
John Lakos: Large-Scale C++ Software Design. Addison-Wesley, 1997, ISBN 0201633620.
Ira Pohl: C++ for Fortran Programmers. Addison-Wesley, 1997, ISBN 0201924838.
Scott Meyers: Effective C++ (2nd ed.). Addison-Wesley, 1997, ISBN 0201924889.
Scott Meyers: More Effective C++. Addison-Wesley, 1995, ISBN 020163371X.
David R. Musser and Atul Saini: STL Tutorial and Reference Guide. Addison-Wesley, 1996, ISBN 0201633981.
Matthew H. Austern: Generic Programming and the STL: Using and Extending the C++ Standard Template Library. Addison-Wesley, 1998, ISBN 0201309564.
Mark Weiss: Algorithms,
Data Structures, and Problem Solving C++.
Addison-Wesley, 1996, ISBN 0805316663.