Titel: C++ Cookbook
Autor/en: Jeff Cogswell, Ray Lischner, Ryan Stephens
1, black & white illustrations.
O'Reilly Media, Inc, USA
11. November 2005 - kartoniert - 594 Seiten
Despite its highly adaptable and flexible nature, C++ is also one of the more complex programming languages to learn. Once mastered, however, it can help you organize and process information with amazing efficiency and quickness.
The C++ Cookbook will make your path to mastery much shorter. This practical, problem-solving guide is ideal if you're an engineer, programmer, or researcher writing an application for one of the legions of platforms on which C++ runs. The algorithms provided in C++ Cookbook will jump-start your development by giving you some basic building blocks that you don't have to develop on your own.
Less a tutorial than a problem-solver, the book addresses many of the most common problems you're likely encounter--whether you've been programming in C++ for years or you're relatively new to the language. Here are just some of the time-consuming tasks this book contains practical solutions for:
* Reading the contents of a directory
* Creating a singleton class
* Date and time parsing/arithmetic
* String and text manipulation
* Working with files
* Parsing XML
* Using the standard containers
Typical of O'Reilly's "Cookbook" series, C++ Cookbook is written in a straightforward format, featuring recipes that contain problem statements and code solutions, and apply not to hypothetical situations, but those that you're likely to encounter. A detailed explanation then follows each recipe in order to show you how and why the solution works. This question-solution-discussion format is a proven teaching method, as any fan of the "Cookbook" series can attest to. This book will move quickly to the top of your list of essential C++ references.
Preface 1. Building C++ Applications 1.1 Obtaining and Installing GCC 1.2 Building a Simple "Hello, World" Application from the Command Line 1.3 Building a Static Library from the Command Line 1.4 Building a Dynamic Library from the Command Line 1.5 Building a Complex Application from the Command Line 1.6 Installing Boost.Build 1.7 Building a Simple "Hello, World" Application Using Boost.Build 1.8 Building a Static Library Using Boost.Build 1.9 Building a Dynamic Library Using Boost.Build 1.10 Building a Complex Application Using Boost.Build 1.11 Building a Static Library with an IDE 1.12 Building a Dynamic Library with an IDE 1.13 Building a Complex Application with an IDE 1.14 Obtaining GNU make 1.15 Building A Simple "Hello, World" Application with GNU make 1.16 Building a Static Library with GNU Make 1.17 Building a Dynamic Library with GNU Make 1.18 Building a Complex Application with GNU make 1.19 Defining a Macro 1.20 Specifying a Command-Line Option from Your IDE 1.21 Producing a Debug Build 1.22 Producing a Release Build 1.23 Specifying a Runtime Library Variant 1.24 Enforcing Strict Conformance to the C++ Standard 1.25 Causing a Source File to Be Linked Automatically Against a Specified Library 1.26 Using Exported Templates 2. Code Organization 2.1 Making Sure a Header File Gets Included Only Once 2.2 Ensuring You Have Only One Instance of a Variable Across Multiple Source Files 2.3 Reducing #includes with Forward Class Declarations 2.4 Preventing Name Collisions with Namespaces 2.5 Including an Inline File 3. Numbers 3.1 Converting a String to a Numeric Type 3.2 Converting Numbers to Strings 3.3 Testing Whether a String ontains a Valid Number 3.4 Comparing Floating-Point Numbers with Bounded Accuracy 3.5 Parsing a String Containing a Number in Scientific Notation 3.6 Converting Between Numeric Types 3.7 Getting the Minimum and Maximum Values for a Numeric Type 4. Strings and Text 4.1 Padding a String 4.2 Trimming a String 4.3 Storing Strings in a Sequence 4.4 Getting the Length of a String 4.5 Reversing a String 4.6 Splitting a String 4.7 Tokenizing a String 4.8 Joining a Sequence of Strings 4.9 Finding Things in Strings 4.10 Finding the nth Instance of a Substring 4.11 Removing a Substring from a String 4.12 Converting a String to Lower- or Uppercase 4.13 Doing a Case-Insensitive String Comparison 4.14 Doing a Case-Insensitive String Search 4.15 Converting Between Tabs and Spaces in a Text File 4.16 Wrapping Lines in a Text File 4.17 Counting the Number of Characters, Words, and Lines in a Text File 4.18 Counting Instances of Each Word in a Text File 4.19 Add Margins to a Text File 4.20 Justify a Text File 4.21 Squeeze Whitespace to Single Spaces in a Text File 4.22 Autocorrect Text as a Buffer Changes 4.23 Reading a Comma-Separated Text File 4.24 Using Regular Expressions to Split a String 5. Dates and Times 5.1 Obtaining the Current Date and Time 5.2 Formatting a Date/Time as a String 5.3 Performing Date and Time Arithmetic 5.4 Converting Between Time Zones 5.5 Determining a Day's Number Within a Given Year 5.6 Defining Constrained Value Types 6. Managing Data with Containers 6.1 Using vectors Instead of Arrays 6.2 Using vectors Efficiently 6.3 Copying a vector 6.4 Storing Pointers in a vector 6.5 Storing Objects in a list 6.6 Mapping strings to Other Things 6.7 Using Hashed Containers 6.8 Storing Objects in Sorted Order 6.9 Storing Containers in Containers 7. Algorithms 7.1 Iterating Through a Container 7.2 Removing Objects from a Container 7.3 Randomly Shuffling Data 7.4 Comparing Ranges 7.5 Merging Data 7.6 Sorting a Range 7.7 Partitioning a Range 7.8 Performing Set Operations on Sequences 7.9 Transforming Elements in a Sequence 7.10 Writing Your Own Algorithm 7.11 Printing a Range to a Stream 8. Classes 8.1 Initializing Class Member Variables 8.2 Using a Function to Create Objects (a.k.a. Factory Pattern) 8.3 Using Constructors and Destructors to Manage Resources (or RAII) 8.4 Automatically Adding New Class Instances to a Container 8.5 Ensuring a Single Copy of a Member Variable 8.6 Determining an Object's Type at Runtime 8.7 Determining if One Object's Class Is a Subclass of Another 8.8 Giving Each Instance of a Class a Unique Identifier 8.9 Creating a Singleton Class 8.10 Creating an Interface with an Abstract Base Class 8.11 Writing a Class Template 8.12 Writing a Member Function Template 8.13 Overloading the Increment and Decrement Operators 8.14 Overloading Arithmetic and Assignment Operators for Intuitive Class Behavior 8.15 Calling a Superclass Virtual Function 9. Exceptions and Safety 9.1 Creating an Exception Class 9.2 Making a Constructor Exception-Safe 9.3 Making an Initializer List Exception-Safe 9.4 Making Member Functions Exception-Safe 9.5 Safely Copying an Object10. Streams and Files 10.1 Lining Up Text Output 10.2 Formatting Floating-Point Output 10.3 Writing Your Own Stream Manipulators 10.4 Making a Class Writable to a Stream 10.5 Making a Class Readable from a Stream 10.6 Getting Information About a File 10.7 Copying a File 10.8 Deleting or Renaming a File 10.9 Creating a Temporary Filename and File 10.10 Creating a Directory 10.11 Removing a Directory 10.12 Reading the Contents of a Directory 10.13 Extracting a File Extension from a String 10.14 Extracting a Filename from a Full Path 10.15 Extracting a Path from a Full Path and Filename 10.16 Replacing a File Extension 10.17 Combining Two Paths into a Single Path11. Science and Mathematics 11.1 Computing the Number of Elements in a Container 11.2 Finding the Greatest or Least Value in a Container 11.3 Computing the Sum and Mean of Elements in a Container 11.4 Filtering Values Outside a Given Range 11.5 Computing Variance, Standard Deviation, and Other Statistical Functions 11.6 Generating Random Numbers 11.7 Initializing a Container with Random Numbers 11.8 Representing a Dynamically Sized Numerical Vector 11.9 Representing a Fixed-Size Numerical Vector 11.10 Computing a Dot Product 11.11 Computing the Norm of a Vector 11.12 Computing the Distance Between Two Vectors 11.13 Implementing a Stride Iterator 11.14 Implementing a Dynamically Sized Matrix 11.15 Implementing a Constant-Sized Matrix 11.16 Multiplying Matricies 11.17 Computing the Fast Fourier Transform 11.18 Working with Polar Coordinates 11.19 Performing Arithmetic on Bitsets 11.20 Representing Large Fixed-Width Integers 11.21 Implementing Fixed-Point Numbers 12. Multithreading 12.1 Creating a Thread 12.2 Making a Resource Thread-Safe 12.3 Notifying One Thread from Another 12.4 Initializing Shared Resources Once 12.5 Passing an Argument to a Thread Function 13. Internationalization 13.1 Hardcoding a Unicode String 13.2 Writing and Reading Numbers 13.3 Writing and Reading Dates and Times 13.4 Writing and Reading Currency 13.5 Sorting Localized Strings 14. XML 14.1 Parsing a Simple XML Document 14.2 Working with Xerces Strings 14.3 Parsing a Complex XML Document 14.4 Manipulating an XML document 14.5 Validating an XML Document with a DTD 14.6 Validating an XML Document with a Schema 14.7 Transforming an XML Document with XSLT 14.8 Evaluating an XPath Expression 14.9 Using XML to Save and Restore a Collection of Objects15. Miscellaneous 15.1 Using Function Pointers for Callbacks 15.2 Using Pointers to Class Members 15.3 Ensuring That a Function Doesn't Modify an Argument 15.4 Ensuring That a Member Function Doesn't Modify Its Object 15.5 Writing an Operator That Isn't a Member Function 15.6 Initializing a Sequence with Comma-Separated Values Index
Ryan Stephens is a software engineer, writer, and student living in Tempe, AZ. He enjoys programming in virtually any language, especially C++. His interests include the fields of information retrieval and data mining, and pretty much anything that has to do with algorithms and large data sets. When he's not working, writing, or programming, he plays with his kids, works on his house, or goes cycling.
Christopher Diggins is a freelance software developer and writer who has been programming computers since he was "haut comme trois pommes". Christopher writes regularly for the C++ Users Journal, and is the designer of the Heron programming lanugage.
Jonathan Turkanis is the author of the Boost Iostreams library and several other open source C++ libraries covering areas including smart pointers, runtime reflection, component architectures and aspect-oriented programming. He is a Ph.D. candidate in mathematical logic at the University of California at Berkeley.
Jeff Cogswell has been programming in several languages for many years. His background was previously in telecom, writing software for such strange things as network management protocols. Lately, however, his work has focused more on web development. After spending a few years in both Florida and California, Jeff now lives in Michigan. He's holding out for some warmer weather.
"Lange Zeit hatten Perl- und Java-Entwickler ihren C++-Kollegen eines voraus: ein Cookbook von O'Reilly. Das ändert sich nun mit dem vorliegenden C++ Cookbook. Es folgt wie erwartet dem gewohnten Schema, typische Probleme und deren Lösung vorzustellen. Dabei werden, soweit möglich, die Standardwerkzeuge der Programmiersprache verwendet und nur im Notfall auf externe Bibliotheken (hier besonders die freien boost-Bibliotheken) zurückgegriffen. [...] Ich empfehle dieses Buch besonders C++-Einsteigern, die bereits über Grundkenntnisse verfügen und vermeiden wollen, ihre Zeit mit dem Lösen von Standardproblemen zu verbringen. Der fortgeschrittene Entwickler findet in diesem Buch effiziente und einfache Lösungen für alltägliche Aufgaben und kann von den ausführlichen Hintergrundinformationen profitieren." - Kai Wurm, Linux Usergroup der Studentensiedlung Freiburg, Januar 2006