Description

Book Synopsis


Table of Contents

Preface iii

Special Features xxiv

1 Introduction 1

1.1 What is Programming? 2

1.2 The Anatomy of a Computer 3

C&S Computers are Everywhere 5

1.3 Machine Code and Programming Languages 5

C&S Standards Organizations 7

1.4 Becoming Familiar with Your Programming Environment 7

PT 1 Backup Copies 10

1.5 Analyzing Your First Program 11

CE 1 Omitting Semicolons 13

ST 1 Escape Sequences 13

1.6 Errors 14

CE 2 Misspelling Words 15

1.7 PROBLEM SOLVING Algorithm Design 16

The Algorithm Concept 16

An Algorithm for Solving an Investment Problem 17

Pseudocode 18

From Algorithms to Programs 19

HT 1 Describing an Algorithm with Pseudocode 19

WE 1 Writing an Algorithm for Tiling a Floor 21

2 Fundamental Data Types 25

2.1 Variables 26

Variable Definitions 26

Number Types 28

Variable Names 29

The Assignment Statement 30

Constants 31

Comments 31

CE 1 Using Undefined Variables 33

CE 2 Using Uninitialized Variables 33

PT 1 Choose Descriptive Variable Names 33

PT 2 Do Not Use Magic Numbers 34

ST 1 Numeric Types in C++ 34

ST 2 Numeric Ranges and Precisions 35

ST 3 Defining Variables with auto 35

2.2 Arithmetic 36

Arithmetic Operators 36

Increment and Decrement 36

Integer Division and Remainder 36

Converting Floating-Point Numbers to Integers 37

Powers and Roots 38

CE 3 Unintended Integer Division 39

CE 4 Unbalanced Parentheses 40

CE 5 Forgetting Header Files 40

CE 6 Roundoff Errors 41

PT 3 Spaces in Expressions 42

ST 4 Casts 42

ST 5 Combining Assignment and Arithmetic 42

C&S The Pentium Floating-Point Bug 43

2.3 Input and Output 44

Input 44

Formatted Output 45

2.4 PROBLEM SOLVING First Do It By Hand 47

WE 1 Computing Travel Time 48

HT 1 Carrying out Computations 48

WE 2 Computing the Cost of Stamps 51

2.5 Strings 51

The string Type 51

Concatenation 52

String Input 52

String Functions 52

C&S International Alphabets and Unicode 55

3 Decisions 59

3.1 The if Statement 60

CE 1 A Semicolon After the if Condition 63

PT 1 Brace Layout 63

PT 2 Always Use Braces 64

PT 3 Tabs 64

PT 4 Avoid Duplication in Branches 65

ST 1 The Conditional Operator 65

3.2 Comparing Numbers and Strings 66

CE 2 Confusing = and == 68

CE 3 Exact Comparison of Floating-Point Numbers 68

PT 5 Compile with Zero Warnings 69

ST 2 Lexicographic Ordering of Strings 69

HT 1 Implementing an if Statement 70

WE 1 Extracting the Middle 72

C&S Dysfunctional Computerized Systems 72

3.3 Multiple Alternatives 73

ST 3 The switch Statement 75

3.4 Nested Branches 76

CE 4 The Dangling else Problem 79

PT 6 Hand-Tracing 79

3.5 PROBLEM SOLVING Flowcharts 81

3.6 PROBLEM SOLVING Test Cases 83

PT 7 Make a Schedule and Make Time for Unexpected Problems 84

3.7 Boolean Variables and Operators 85

CE 5 Combining Multiple Relational Operators 88

CE 6 Confusing && and || Conditions 88

ST 4 Short-Circuit Evaluation of Boolean Operators 89

ST 5 De Morgan’s Law 89

3.8 APPLICATION Input Validation 90

C&S Artificial Intelligence 92

4 Loops 95

4.1 The while Loop 96

CE 1 Infinite Loops 100

CE 2 Don’t Think “Are We There Yet?” 101

CE 3 Off-by-One Errors 101

C&S The First Bug 102

4.2 PROBLEM SOLVING Hand-Tracing 103

4.3 The for Loop 106

PT 1 Use for Loops for Their Intended Purpose Only 109

PT 2 Choose Loop Bounds That Match Your Task 110

PT 3 Count Iterations 110

4.4 The do Loop 111

PT 4 Flowcharts for Loops 111

4.5 Processing Input 112

Sentinel Values 112

Reading Until Input Fails 114

ST 1 Clearing the Failure State 115

ST 2 The Loop-and-a-Half Problem and the break Statement 116

ST 3 Redirection of Input and Output 116

4.6 PROBLEM SOLVING Storyboards 117

4.7 Common Loop Algorithms 119

Sum and Average Value 119

Counting Matches 120

Finding the First Match 120

Prompting Until a Match is Found 121

Maximum and Minimum 121

Comparing Adjacent Values 122

HT 1 Writing a Loop 123

WE 1 Credit Card Processing 126

4.8 Nested Loops 126

WE 2 Manipulating the Pixels in an Image 129

4.9 PROBLEM SOLVING Solve a Simpler Problem First 130

4.10 Random Numbers and Simulations 134

Generating Random Numbers 134

Simulating Die Tosses 135

The Monte Carlo Method 136

C&S Digital Piracy 138

5 Functions 141

5.1 Functions as Black Boxes 142

5.2 Implementing Functions 143

PT 1 Function Comments 146

5.3 Parameter Passing 146

PT 2 Do Not Modify Parameter Variables 148

5.4 Return Values 148

CE 1 Missing Return Value 149

ST 1 Function Declarations 150

HT 1 Implementing a Function 151

WE 1 Generating Random Passwords 152

WE 2 Using a Debugger 152

5.5 Functions Without Return Values 153

5.6 PROBLEM SOLVING Reusable Functions 154

5.7 PROBLEM SOLVING Stepwise Refinement 156

PT 3 Keep Functions Short 161

PT 4 Tracing Functions 161

PT 5 Stubs 162

WE 3 Calculating a Course Grade 163

5.8 Variable Scope and Global Variables 163

PT 6 Avoid Global Variables 165

5.9 Reference Parameters 165

PT 7 Prefer Return Values to Reference Parameters 169

ST 2 Constant References 170

5.10 Recursive Functions (Optional) 170

HT 2 Thinking Recursively 173

C&S The Explosive Growth of Personal Computers 174

6 Arrays and Vectors 179

6.1 Arrays 180

Defining Arrays 180

Accessing Array Elements 182

Partially Filled Arrays 183

CE 1 Bounds Errors 184

PT 1 Use Arrays for Sequences of Related Values 184

C&S Computer Viruses 185

6.2 Common Array Algorithms 185

Filling 186

Copying 186

Sum and Average Value 186

Maximum and Minimum 187

Element Separators 187

Counting Matches 187

Linear Search 188

Removing an Element 188

Inserting an Element 189

Swapping Elements 190

Reading Input 191

ST 1 Sorting with the C++ Library 192

ST 2 A Sorting Algorithm 192

ST 3 Binary Search 193

6.3 Arrays and Functions 194

ST 4 Constant Array Parameters 198

6.4 PROBLEM SOLVING Adapting Algorithms 198

HT 1 Working with Arrays 200

WE 1 Rolling the Dice 203

6.5 PROBLEM SOLVING Discovering Algorithms by Manipulating Physical Objects 203

6.6 Two-Dimensional Arrays 206

Defining Two-Dimensional Arrays 207

Accessing Elements 207

Locating Neighboring Elements 208

Computing Row and Column Totals 208

Two-Dimensional Array Parameters 210

CE 2 Omitting the Column Size of a Two-Dimensional Array Parameter 212

WE 2 A World Population Table 213

6.7 Vectors 213

Defining Vectors 214

Growing and Shrinking Vectors 215

Vectors and Functions 216

Vector Algorithms 216

Two-Dimensional Vectors 218

PT 2 Prefer Vectors over Arrays 219

ST 5 The Range-Based for Loop 219

7 Pointers and Structures 223

7.1 Defining and Using Pointers 224

Defining Pointers 224

Accessing Variables Through Pointers 225

Initializing Pointers 227

CE 1 Confusing Pointers with the Data to Which They Point 228

PT 1 Use a Separate Definition for Each Pointer Variable 229

ST 1 Pointers and References 229

7.2 Arrays and Pointers 230

Arrays as Pointers 230

Pointer Arithmetic 230

Array Parameter Variables are Pointers 232

ST 2 Using a Pointer to Step Through an Array 233

CE 2 Returning a Pointer to a Local Variable 234

PT 2 Program Clearly, Not Cleverly 234

ST 3 Constant Pointers 235

7.3 C and C++ Strings 235

The char Type 235

C Strings 236

Character Arrays 237

Converting Between C and C++ Strings 237

C++ Strings and the [] Operator 238

ST 4 Working with C Strings 238

7.4 Dynamic Memory Allocation 240

CE 3 Dangling Pointers 242

CE 4 Memory Leaks 243

7.5 Arrays and Vectors of Pointers 243

7.6 PROBLEM SOLVING Draw a Picture 246

HT 1 Working with Pointers 248

WE 1 Producing a Mass Mailing 249

C&S Embedded Systems 250

7.7 Structures 250

Structured Types 250

Structure Assignment and Comparison 251

Functions and Structures 252

Arrays of Structures 252

Structures with Array Members 253

Nested Structures 253

7.8 Pointers and Structures 254

Pointers to Structures 254

Structures with Pointer Members 255

ST 5 Smart Pointers 256

8 Streams 259

8.1 Reading and Writing Text Files 260

Opening a Stream 260

Reading from a File 261

Writing to a File 262

A File Processing Example 262

8.2 Reading Text Input 265

Reading Words 265

Reading Characters 266

Reading Lines 267

CE 1 Mixing >> and getline Input 268

ST 1 Stream Failure Checking 269

8.3 Writing Text Output 270

ST 2 Unicode, UTF-8, and C++ Strings 272

8.4 Parsing and Formatting Strings 273

8.5 Command Line Arguments 274

C&S Encryption Algorithms 277

HT 1 Processing Text Files 278

WE 1 Looking for for Duplicates 281

8.6 Random Access and Binary Files 281

Random Access 281

Binary Files 282

Processing Image Files 282

C&S Databases and Privacy 286

9 Classes 289

9.1 Object-Oriented Programming 290

9.2 Implementing a Simple Class 292

9.3 Specifying the Public Interface of a Class 294

CE 1 Forgetting a Semicolon 296

9.4 Designing the Data Representation 297

9.5 Member Functions 299

Implementing Member Functions 299

Implicit and Explicit Parameters 299

Calling a Member Function from a Member Function 301

PT 1 All Data Members Should Be Private; Most Member Functions Should Be Public 303

PT 2 const Correctness 303

9.6 Constructors 304

CE 2 Trying to Call a Constructor 306

ST 1 Overloading 306

ST 2 Initializer Lists 307

ST 3 Universal and Uniform Initialization Syntax 308

9.7 PROBLEM SOLVING Tracing Objects 308

HT 1 Implementing a Class 310

WE 1 Implementing a Bank Account Class 314

C&S Electronic Voting Machines 314

9.8 PROBLEM SOLVING Discovering Classes 315

PT 3 Make Parallel Vectors into Vectors of Objects 317

9.9 Separate Compilation 318

9.10 Pointers to Objects 322

Dynamically Allocating Objects 322

The -> Operator 323

The this Pointer 324

9.11 PROBLEM SOLVING Patterns for Object Data 324

Keeping a Total 324

Counting Events 325

Collecting Values 326

Managing Properties of an Object 326

Modeling Objects with Distinct States 327

Describing the Position of an Object 328

C&S Open Source and Free Software 329

10 Inheritance 333

10.1 Inheritance Hierarchies 334

10.2 Implementing Derived Classes 338

CE 1 Private Inheritance 341

CE 2 Replicating Base-Class Members 341

PT 1 Use a Single Class for Variation in Values, Inheritance for Variation in Behavior 342

ST 1 Calling the Base-Class Constructor 342

10.3 Overriding Member Functions 343

CE 3 Forgetting the Base-Class Name 345

10.4 Virtual Functions and Polymorphism 346

The Slicing Problem 346

Pointers to Base and Derived Classes 347

Virtual Functions 348

Polymorphism 349

PT 2 Don’t Use Type Tags 352

CE 4 Slicing an Object 352

CE 5 Failing to Override a Virtual Function 353

ST 2 Virtual Self-Calls 354

HT 1 Developing an Inheritance Hierarchy 354

WE 1 Implementing an Employee Hierarchy for Payroll Processing 359

C&S Who Controls the Internet? 360

11 Recursion 363

11.1 Triangle Numbers 364

CE 1 Tracing Through Recursive Functions 367

CE 2 Infinite Recursion 368

HT 1 Thinking Recursively 369

WE 1 Finding Files 372

11.2 Recursive Helper Functions 372

11.3 The Efficiency of Recursion 373

11.4 Permutations 377

11.5 Mutual Recursion 380

11.6 Backtracking 383

WE 2 Towers of Hanoi 389

C&S The Limits of Computation 390

12 Sorting and Searching 393

12.1 Selection Sort 394

12.2 Profiling the Selection Sort Algorithm 397

12.3 Analyzing the Performance of the Selection Sort Algorithm 398

ST 1 Oh, Omega, and Theta 399

ST 2 Insertion Sort 400

12.4 Merge Sort 402

12.5 Analyzing the Merge Sort Algorithm 405

ST 3 The Quicksort Algorithm 407

12.6 Searching 408

Linear Search 408

Binary Search 410

PT 1 Library Functions for Sorting and Binary Search 412

ST 4 Defining an Ordering for Sorting Objects 413

12.7 PROBLEM SOLVING Estimating the Running Time of an Algorithm 413

Linear Time 413

Quadratic Time 414

The Triangle Pattern 415

Logarithmic Time 417

WE 1 Enhancing the Insertion Sort Algorithm 418

C&S The First Programmer 418

13 Advanced C++ 421

13.1 Operator Overloading 422

Operator Functions 422

Overloading Comparison Operators 425

Input and Output 425

Operator Members 426

ST 1 Overloading Increment and Decrement Operators 427

ST 2 Implicit Type Conversions 428

ST 3 Returning References 429

WE 1 A Fraction Class 430

13.2 Automatic Memory Management 430

Constructors That Allocate Memory 430

Destructors 432

Overloading the Assignment Operator 433

Copy Constructors 437

PT 1 Use Reference Parameters to Avoid Copies 441

CE 1 Defining a Destructor Without the Other Two Functions of the “Big Three” 442

ST 4 Virtual Destructors 443

ST 5 Suppressing Automatic Generation of Memory Management Functions 443

ST 6 Move Operations 444

ST 7 Shared Pointers 445

WE 2 Tracing Memory Management of Strings 446

13.3 Templates 446

Function Templates 447

Class Templates 448

ST 8 Non-Type Template Parameters 450

14 Linked Lists, Stacks, and Queues 453

14.1 Using Linked Lists 454

14.2 Implementing Linked Lists 459

The Classes for Lists, Node, and Iterators 459

Implementing Iterators 460

Implementing Insertion and Removal 462

WE 1 Implementing a Linked List Template 472

14.3 The Efficiency of List, Array, and Vector Operations 472

14.4 Stacks and Queues 476

14.5 Implementing Stacks and Queues 479

Stacks as Linked Lists 479

Stacks as Arrays 482

Queues as Linked Lists 482

Queues as Circular Arrays 483

14.6 Stack and Queue Applications 484

Balancing Parentheses 484

Evaluating Reverse Polish Expressions 485

Evaluating Algebraic Expressions 487

Backtracking 490

ST 1 Reverse Polish Notation 492

15 Sets, Maps, and Hash Tables 495

15.1 Sets 496

15.2 Maps 499

PT 1 Use the auto Type for Iterators 503

ST 1 Multisets and Multimaps 503

WE 1 Word Frequency 504

15.3 Implementing a Hash Table 504

Hash Codes 504

Hash Tables 505

Finding an Element 507

Adding and Removing Elements 508

Iterating over a Hash Table 508

ST 2 Implementing Hash Functions 514

ST 3 Open Addressing 516

16 Tree Structures 519

16.1 Basic Tree Concepts 520

16.2 Binary Trees 524

Binary Tree Examples 524

Balanced Trees 526

A Binary Tree Implementation 527

WE 1 Building a Huffman Tree 528

16.3 Binary Search Trees 528

The Binary Search Property 529

Insertion 530

Removal 532

Efficiency of the Operations 533

16.4 Tree Traversal 538

Inorder Traversal 539

Preorder and Postorder Traversals 540

The Visitor Pattern 541

Depth-First and Breadth-First Search 542

Tree Iterators 543

16.5 Red-Black Trees 544

Basic Properties of Red-Black Trees 544

Insertion 546

Removal 548

WE 2 Implementing a Red-Black Tree 551

17 Priority Queues and Heaps 553

17.1 Priority Queues 554

WE 1 Simulating a Queue of Waiting Customers 557

17.2 Heaps 557

17.3 The Heapsort Algorithm 567

Appendix A Reserved Word Summary A-1

Appendix B Operator Summary A-3

Appendix C Character Codes A-5

Appendix D C++ Library Summary A-8

Appendix E C++ Language Coding Guidelines A-12

Appendix F Number Systems and Bit and Shift Operations A-19

Glossary G-1

Index I-1

Credits C-1

Quick Reference C-2

Big C

    Product form

    £128.66

    Includes FREE delivery

    RRP £142.95 – you save £14.29 (9%)

    Order before 4pm today for delivery by Mon 29 Jun 2026.

    A Loose-leaf by Cay S. Horstmann

    10 in stock


      View other formats and editions of Big C by Cay S. Horstmann

      Publisher: John Wiley & Sons Inc
      Publication Date: 04/08/2020
      ISBN13: 9781119739678, 978-1119739678
      ISBN10: 1119739675

      Description

      Book Synopsis


      Table of Contents

      Preface iii

      Special Features xxiv

      1 Introduction 1

      1.1 What is Programming? 2

      1.2 The Anatomy of a Computer 3

      C&S Computers are Everywhere 5

      1.3 Machine Code and Programming Languages 5

      C&S Standards Organizations 7

      1.4 Becoming Familiar with Your Programming Environment 7

      PT 1 Backup Copies 10

      1.5 Analyzing Your First Program 11

      CE 1 Omitting Semicolons 13

      ST 1 Escape Sequences 13

      1.6 Errors 14

      CE 2 Misspelling Words 15

      1.7 PROBLEM SOLVING Algorithm Design 16

      The Algorithm Concept 16

      An Algorithm for Solving an Investment Problem 17

      Pseudocode 18

      From Algorithms to Programs 19

      HT 1 Describing an Algorithm with Pseudocode 19

      WE 1 Writing an Algorithm for Tiling a Floor 21

      2 Fundamental Data Types 25

      2.1 Variables 26

      Variable Definitions 26

      Number Types 28

      Variable Names 29

      The Assignment Statement 30

      Constants 31

      Comments 31

      CE 1 Using Undefined Variables 33

      CE 2 Using Uninitialized Variables 33

      PT 1 Choose Descriptive Variable Names 33

      PT 2 Do Not Use Magic Numbers 34

      ST 1 Numeric Types in C++ 34

      ST 2 Numeric Ranges and Precisions 35

      ST 3 Defining Variables with auto 35

      2.2 Arithmetic 36

      Arithmetic Operators 36

      Increment and Decrement 36

      Integer Division and Remainder 36

      Converting Floating-Point Numbers to Integers 37

      Powers and Roots 38

      CE 3 Unintended Integer Division 39

      CE 4 Unbalanced Parentheses 40

      CE 5 Forgetting Header Files 40

      CE 6 Roundoff Errors 41

      PT 3 Spaces in Expressions 42

      ST 4 Casts 42

      ST 5 Combining Assignment and Arithmetic 42

      C&S The Pentium Floating-Point Bug 43

      2.3 Input and Output 44

      Input 44

      Formatted Output 45

      2.4 PROBLEM SOLVING First Do It By Hand 47

      WE 1 Computing Travel Time 48

      HT 1 Carrying out Computations 48

      WE 2 Computing the Cost of Stamps 51

      2.5 Strings 51

      The string Type 51

      Concatenation 52

      String Input 52

      String Functions 52

      C&S International Alphabets and Unicode 55

      3 Decisions 59

      3.1 The if Statement 60

      CE 1 A Semicolon After the if Condition 63

      PT 1 Brace Layout 63

      PT 2 Always Use Braces 64

      PT 3 Tabs 64

      PT 4 Avoid Duplication in Branches 65

      ST 1 The Conditional Operator 65

      3.2 Comparing Numbers and Strings 66

      CE 2 Confusing = and == 68

      CE 3 Exact Comparison of Floating-Point Numbers 68

      PT 5 Compile with Zero Warnings 69

      ST 2 Lexicographic Ordering of Strings 69

      HT 1 Implementing an if Statement 70

      WE 1 Extracting the Middle 72

      C&S Dysfunctional Computerized Systems 72

      3.3 Multiple Alternatives 73

      ST 3 The switch Statement 75

      3.4 Nested Branches 76

      CE 4 The Dangling else Problem 79

      PT 6 Hand-Tracing 79

      3.5 PROBLEM SOLVING Flowcharts 81

      3.6 PROBLEM SOLVING Test Cases 83

      PT 7 Make a Schedule and Make Time for Unexpected Problems 84

      3.7 Boolean Variables and Operators 85

      CE 5 Combining Multiple Relational Operators 88

      CE 6 Confusing && and || Conditions 88

      ST 4 Short-Circuit Evaluation of Boolean Operators 89

      ST 5 De Morgan’s Law 89

      3.8 APPLICATION Input Validation 90

      C&S Artificial Intelligence 92

      4 Loops 95

      4.1 The while Loop 96

      CE 1 Infinite Loops 100

      CE 2 Don’t Think “Are We There Yet?” 101

      CE 3 Off-by-One Errors 101

      C&S The First Bug 102

      4.2 PROBLEM SOLVING Hand-Tracing 103

      4.3 The for Loop 106

      PT 1 Use for Loops for Their Intended Purpose Only 109

      PT 2 Choose Loop Bounds That Match Your Task 110

      PT 3 Count Iterations 110

      4.4 The do Loop 111

      PT 4 Flowcharts for Loops 111

      4.5 Processing Input 112

      Sentinel Values 112

      Reading Until Input Fails 114

      ST 1 Clearing the Failure State 115

      ST 2 The Loop-and-a-Half Problem and the break Statement 116

      ST 3 Redirection of Input and Output 116

      4.6 PROBLEM SOLVING Storyboards 117

      4.7 Common Loop Algorithms 119

      Sum and Average Value 119

      Counting Matches 120

      Finding the First Match 120

      Prompting Until a Match is Found 121

      Maximum and Minimum 121

      Comparing Adjacent Values 122

      HT 1 Writing a Loop 123

      WE 1 Credit Card Processing 126

      4.8 Nested Loops 126

      WE 2 Manipulating the Pixels in an Image 129

      4.9 PROBLEM SOLVING Solve a Simpler Problem First 130

      4.10 Random Numbers and Simulations 134

      Generating Random Numbers 134

      Simulating Die Tosses 135

      The Monte Carlo Method 136

      C&S Digital Piracy 138

      5 Functions 141

      5.1 Functions as Black Boxes 142

      5.2 Implementing Functions 143

      PT 1 Function Comments 146

      5.3 Parameter Passing 146

      PT 2 Do Not Modify Parameter Variables 148

      5.4 Return Values 148

      CE 1 Missing Return Value 149

      ST 1 Function Declarations 150

      HT 1 Implementing a Function 151

      WE 1 Generating Random Passwords 152

      WE 2 Using a Debugger 152

      5.5 Functions Without Return Values 153

      5.6 PROBLEM SOLVING Reusable Functions 154

      5.7 PROBLEM SOLVING Stepwise Refinement 156

      PT 3 Keep Functions Short 161

      PT 4 Tracing Functions 161

      PT 5 Stubs 162

      WE 3 Calculating a Course Grade 163

      5.8 Variable Scope and Global Variables 163

      PT 6 Avoid Global Variables 165

      5.9 Reference Parameters 165

      PT 7 Prefer Return Values to Reference Parameters 169

      ST 2 Constant References 170

      5.10 Recursive Functions (Optional) 170

      HT 2 Thinking Recursively 173

      C&S The Explosive Growth of Personal Computers 174

      6 Arrays and Vectors 179

      6.1 Arrays 180

      Defining Arrays 180

      Accessing Array Elements 182

      Partially Filled Arrays 183

      CE 1 Bounds Errors 184

      PT 1 Use Arrays for Sequences of Related Values 184

      C&S Computer Viruses 185

      6.2 Common Array Algorithms 185

      Filling 186

      Copying 186

      Sum and Average Value 186

      Maximum and Minimum 187

      Element Separators 187

      Counting Matches 187

      Linear Search 188

      Removing an Element 188

      Inserting an Element 189

      Swapping Elements 190

      Reading Input 191

      ST 1 Sorting with the C++ Library 192

      ST 2 A Sorting Algorithm 192

      ST 3 Binary Search 193

      6.3 Arrays and Functions 194

      ST 4 Constant Array Parameters 198

      6.4 PROBLEM SOLVING Adapting Algorithms 198

      HT 1 Working with Arrays 200

      WE 1 Rolling the Dice 203

      6.5 PROBLEM SOLVING Discovering Algorithms by Manipulating Physical Objects 203

      6.6 Two-Dimensional Arrays 206

      Defining Two-Dimensional Arrays 207

      Accessing Elements 207

      Locating Neighboring Elements 208

      Computing Row and Column Totals 208

      Two-Dimensional Array Parameters 210

      CE 2 Omitting the Column Size of a Two-Dimensional Array Parameter 212

      WE 2 A World Population Table 213

      6.7 Vectors 213

      Defining Vectors 214

      Growing and Shrinking Vectors 215

      Vectors and Functions 216

      Vector Algorithms 216

      Two-Dimensional Vectors 218

      PT 2 Prefer Vectors over Arrays 219

      ST 5 The Range-Based for Loop 219

      7 Pointers and Structures 223

      7.1 Defining and Using Pointers 224

      Defining Pointers 224

      Accessing Variables Through Pointers 225

      Initializing Pointers 227

      CE 1 Confusing Pointers with the Data to Which They Point 228

      PT 1 Use a Separate Definition for Each Pointer Variable 229

      ST 1 Pointers and References 229

      7.2 Arrays and Pointers 230

      Arrays as Pointers 230

      Pointer Arithmetic 230

      Array Parameter Variables are Pointers 232

      ST 2 Using a Pointer to Step Through an Array 233

      CE 2 Returning a Pointer to a Local Variable 234

      PT 2 Program Clearly, Not Cleverly 234

      ST 3 Constant Pointers 235

      7.3 C and C++ Strings 235

      The char Type 235

      C Strings 236

      Character Arrays 237

      Converting Between C and C++ Strings 237

      C++ Strings and the [] Operator 238

      ST 4 Working with C Strings 238

      7.4 Dynamic Memory Allocation 240

      CE 3 Dangling Pointers 242

      CE 4 Memory Leaks 243

      7.5 Arrays and Vectors of Pointers 243

      7.6 PROBLEM SOLVING Draw a Picture 246

      HT 1 Working with Pointers 248

      WE 1 Producing a Mass Mailing 249

      C&S Embedded Systems 250

      7.7 Structures 250

      Structured Types 250

      Structure Assignment and Comparison 251

      Functions and Structures 252

      Arrays of Structures 252

      Structures with Array Members 253

      Nested Structures 253

      7.8 Pointers and Structures 254

      Pointers to Structures 254

      Structures with Pointer Members 255

      ST 5 Smart Pointers 256

      8 Streams 259

      8.1 Reading and Writing Text Files 260

      Opening a Stream 260

      Reading from a File 261

      Writing to a File 262

      A File Processing Example 262

      8.2 Reading Text Input 265

      Reading Words 265

      Reading Characters 266

      Reading Lines 267

      CE 1 Mixing >> and getline Input 268

      ST 1 Stream Failure Checking 269

      8.3 Writing Text Output 270

      ST 2 Unicode, UTF-8, and C++ Strings 272

      8.4 Parsing and Formatting Strings 273

      8.5 Command Line Arguments 274

      C&S Encryption Algorithms 277

      HT 1 Processing Text Files 278

      WE 1 Looking for for Duplicates 281

      8.6 Random Access and Binary Files 281

      Random Access 281

      Binary Files 282

      Processing Image Files 282

      C&S Databases and Privacy 286

      9 Classes 289

      9.1 Object-Oriented Programming 290

      9.2 Implementing a Simple Class 292

      9.3 Specifying the Public Interface of a Class 294

      CE 1 Forgetting a Semicolon 296

      9.4 Designing the Data Representation 297

      9.5 Member Functions 299

      Implementing Member Functions 299

      Implicit and Explicit Parameters 299

      Calling a Member Function from a Member Function 301

      PT 1 All Data Members Should Be Private; Most Member Functions Should Be Public 303

      PT 2 const Correctness 303

      9.6 Constructors 304

      CE 2 Trying to Call a Constructor 306

      ST 1 Overloading 306

      ST 2 Initializer Lists 307

      ST 3 Universal and Uniform Initialization Syntax 308

      9.7 PROBLEM SOLVING Tracing Objects 308

      HT 1 Implementing a Class 310

      WE 1 Implementing a Bank Account Class 314

      C&S Electronic Voting Machines 314

      9.8 PROBLEM SOLVING Discovering Classes 315

      PT 3 Make Parallel Vectors into Vectors of Objects 317

      9.9 Separate Compilation 318

      9.10 Pointers to Objects 322

      Dynamically Allocating Objects 322

      The -> Operator 323

      The this Pointer 324

      9.11 PROBLEM SOLVING Patterns for Object Data 324

      Keeping a Total 324

      Counting Events 325

      Collecting Values 326

      Managing Properties of an Object 326

      Modeling Objects with Distinct States 327

      Describing the Position of an Object 328

      C&S Open Source and Free Software 329

      10 Inheritance 333

      10.1 Inheritance Hierarchies 334

      10.2 Implementing Derived Classes 338

      CE 1 Private Inheritance 341

      CE 2 Replicating Base-Class Members 341

      PT 1 Use a Single Class for Variation in Values, Inheritance for Variation in Behavior 342

      ST 1 Calling the Base-Class Constructor 342

      10.3 Overriding Member Functions 343

      CE 3 Forgetting the Base-Class Name 345

      10.4 Virtual Functions and Polymorphism 346

      The Slicing Problem 346

      Pointers to Base and Derived Classes 347

      Virtual Functions 348

      Polymorphism 349

      PT 2 Don’t Use Type Tags 352

      CE 4 Slicing an Object 352

      CE 5 Failing to Override a Virtual Function 353

      ST 2 Virtual Self-Calls 354

      HT 1 Developing an Inheritance Hierarchy 354

      WE 1 Implementing an Employee Hierarchy for Payroll Processing 359

      C&S Who Controls the Internet? 360

      11 Recursion 363

      11.1 Triangle Numbers 364

      CE 1 Tracing Through Recursive Functions 367

      CE 2 Infinite Recursion 368

      HT 1 Thinking Recursively 369

      WE 1 Finding Files 372

      11.2 Recursive Helper Functions 372

      11.3 The Efficiency of Recursion 373

      11.4 Permutations 377

      11.5 Mutual Recursion 380

      11.6 Backtracking 383

      WE 2 Towers of Hanoi 389

      C&S The Limits of Computation 390

      12 Sorting and Searching 393

      12.1 Selection Sort 394

      12.2 Profiling the Selection Sort Algorithm 397

      12.3 Analyzing the Performance of the Selection Sort Algorithm 398

      ST 1 Oh, Omega, and Theta 399

      ST 2 Insertion Sort 400

      12.4 Merge Sort 402

      12.5 Analyzing the Merge Sort Algorithm 405

      ST 3 The Quicksort Algorithm 407

      12.6 Searching 408

      Linear Search 408

      Binary Search 410

      PT 1 Library Functions for Sorting and Binary Search 412

      ST 4 Defining an Ordering for Sorting Objects 413

      12.7 PROBLEM SOLVING Estimating the Running Time of an Algorithm 413

      Linear Time 413

      Quadratic Time 414

      The Triangle Pattern 415

      Logarithmic Time 417

      WE 1 Enhancing the Insertion Sort Algorithm 418

      C&S The First Programmer 418

      13 Advanced C++ 421

      13.1 Operator Overloading 422

      Operator Functions 422

      Overloading Comparison Operators 425

      Input and Output 425

      Operator Members 426

      ST 1 Overloading Increment and Decrement Operators 427

      ST 2 Implicit Type Conversions 428

      ST 3 Returning References 429

      WE 1 A Fraction Class 430

      13.2 Automatic Memory Management 430

      Constructors That Allocate Memory 430

      Destructors 432

      Overloading the Assignment Operator 433

      Copy Constructors 437

      PT 1 Use Reference Parameters to Avoid Copies 441

      CE 1 Defining a Destructor Without the Other Two Functions of the “Big Three” 442

      ST 4 Virtual Destructors 443

      ST 5 Suppressing Automatic Generation of Memory Management Functions 443

      ST 6 Move Operations 444

      ST 7 Shared Pointers 445

      WE 2 Tracing Memory Management of Strings 446

      13.3 Templates 446

      Function Templates 447

      Class Templates 448

      ST 8 Non-Type Template Parameters 450

      14 Linked Lists, Stacks, and Queues 453

      14.1 Using Linked Lists 454

      14.2 Implementing Linked Lists 459

      The Classes for Lists, Node, and Iterators 459

      Implementing Iterators 460

      Implementing Insertion and Removal 462

      WE 1 Implementing a Linked List Template 472

      14.3 The Efficiency of List, Array, and Vector Operations 472

      14.4 Stacks and Queues 476

      14.5 Implementing Stacks and Queues 479

      Stacks as Linked Lists 479

      Stacks as Arrays 482

      Queues as Linked Lists 482

      Queues as Circular Arrays 483

      14.6 Stack and Queue Applications 484

      Balancing Parentheses 484

      Evaluating Reverse Polish Expressions 485

      Evaluating Algebraic Expressions 487

      Backtracking 490

      ST 1 Reverse Polish Notation 492

      15 Sets, Maps, and Hash Tables 495

      15.1 Sets 496

      15.2 Maps 499

      PT 1 Use the auto Type for Iterators 503

      ST 1 Multisets and Multimaps 503

      WE 1 Word Frequency 504

      15.3 Implementing a Hash Table 504

      Hash Codes 504

      Hash Tables 505

      Finding an Element 507

      Adding and Removing Elements 508

      Iterating over a Hash Table 508

      ST 2 Implementing Hash Functions 514

      ST 3 Open Addressing 516

      16 Tree Structures 519

      16.1 Basic Tree Concepts 520

      16.2 Binary Trees 524

      Binary Tree Examples 524

      Balanced Trees 526

      A Binary Tree Implementation 527

      WE 1 Building a Huffman Tree 528

      16.3 Binary Search Trees 528

      The Binary Search Property 529

      Insertion 530

      Removal 532

      Efficiency of the Operations 533

      16.4 Tree Traversal 538

      Inorder Traversal 539

      Preorder and Postorder Traversals 540

      The Visitor Pattern 541

      Depth-First and Breadth-First Search 542

      Tree Iterators 543

      16.5 Red-Black Trees 544

      Basic Properties of Red-Black Trees 544

      Insertion 546

      Removal 548

      WE 2 Implementing a Red-Black Tree 551

      17 Priority Queues and Heaps 553

      17.1 Priority Queues 554

      WE 1 Simulating a Queue of Waiting Customers 557

      17.2 Heaps 557

      17.3 The Heapsort Algorithm 567

      Appendix A Reserved Word Summary A-1

      Appendix B Operator Summary A-3

      Appendix C Character Codes A-5

      Appendix D C++ Library Summary A-8

      Appendix E C++ Language Coding Guidelines A-12

      Appendix F Number Systems and Bit and Shift Operations A-19

      Glossary G-1

      Index I-1

      Credits C-1

      Quick Reference C-2

      Recently viewed products

      © 2026 Book Curl

        • American Express
        • Apple Pay
        • Diners Club
        • Discover
        • Google Pay
        • Maestro
        • Mastercard
        • PayPal
        • Shop Pay
        • Union Pay
        • Visa

        Login

        Forgot your password?

        Don't have an account yet?
        Create account