C++标准库教程(影印版)

C++标准库教程(影印版)
作 者: 约祖蒂斯
出版社: 清华大学出版社
丛编项: 大学计算机教育国外著名教材系列
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: C++
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

暂缺《C++标准库教程(影印版)》作者简介

内容简介

C++标准库提供了一组通用类和接口,从而极大地拓展了核心C++语言。但是,要高效地利用C++标准库进行开发,只知道标准库的类名及其函数名是不够的,还需要更深入地学习和掌握。本书正是基于这种需要而编写的。本书以最新的C++标准库为基础,不仅介绍了C++标准库及其所有组件,而且还讲述了如何在实际编程中高效地使用它们。本书的重点是标准模板库(STL),详细介绍了标准模板库的容器、迭代器、函数对象以及STL算法。对标准库的每个组件,不仅介绍了其作用和设计方法,而且还给出了相应的范例、详细的描述、可能的陷阱,以及各组件的类及其函数的正确书写和定义。本书讲解全面、详尽、易懂,而且与实际的编程开发紧密相连,不仅可以作为C++高级开发的教材,而且可作为开发人员的案头参考书,以供随时查阅。本书网站http://www.josuttis.com/libbook提供了书中的源代码下载。

图书目录

Contents

Preface xvii

Acknowledgments xix

1 About this Book 1

1.1 Why this Book I

1.2 What You Should Know Before Reading this Book 2

1.3 Style and Structure of the Book 2

1.4 How to Read this Book 4

1.5 State of the Aft 5

1.6 Example Code and Additiona11nformation 5

1.7 Feedback 5

2 Introduction to C++ and the Standard Library 7

2.1 History 7

2.2 New Language Features 9

2.2.1 Templates 9

2.2.2 Explicit initialization for Fundamental Types 14

2.2.3 Exception Handling 15

2.2.4 Namespaces 16

2.2.5 TVpe hoof 18

2.2.6 KeVword exDlicit 18

2.2.7 New Operators for Type Conversion 19

2.2.8 Initialization of Constant Static Members 20

2.2.9 Definition of maino ZI

2.3 Complexity and the Big-O Notation ZI

3 General Concepts 23

3.1 Namespace std 23

3.2 Header Files 24

3.3 Error and Exception Handling 25

3.3.1 Standard ExceDtion Classes 25

3.3.2 Members of Exception Classes 28

3.3.3 Throwing Standard Exceptions 29

3.3.4 Deriving Standard Exception Classes 30

3.4 Allocators 31

4 Utilities 33

4.1 Pairs 33

4.1.1 Convenience Function make--pair () 36

4.1.2 Examples of Pair Usage 37

4.2 Class auto Dtr 38

4.2.1 Motivation of Class auto Dtr 38

4.2.2 Transfer of Ownership bV auto air 40

4.2.3 auto Dtrs as Members 44

4.2.4 Misusing auto--ptrs 46

4.2.5 auto Dtr ExamDles 47

4.2.6 Class auto Dtr in Detail sl

4.3 Numeric Limits 59

4.4 Auxiliary Functions 66

4.4.1 Processing the Minimum and Maximum 66

4.4.2 Swapping TWo Values 67

4.5 Supplementary Comparison Operators 69

4.6 Header Files <cstddef> and <cstdlib> 71

4.6.1 Definitions in <cstddef> 71

4.6.2 Definitions in <cstdlib> 71

5 The Standard Template Library 73

5.1 STL Components 73

5.2 Containers 75

5.2.1 Sequence Containers 76

5.2.2 Associative Containers sl

5.2.3 Container Adapters 82

5.3 Iterators 83

5.3.1 Examples of Using Associative Containers 86

5.3.2 Iterator Categories 93

5.4 Algorithms 94

5.4.1 Ranges 97

5.4.2 Handling Multiple Ranges 101

5.5 Iterator Adapters 104

5.5.1 Insert lterators 104

5.5.2 Stream lterators 107

5.5.3 Reverse lterators 109

5.6 Manipulating Algorithms 111

5.6.1 "Removing" Elements 111

5.6.2 Manipulating Algorithms and Associative Containers 115

5.6.3 Algorithms versus Member Functions 116

5.7 User-Defined Generic Functions 117

5.8 Functions as Algorithm Arguments 119

5.8. 1 Examples of Using Functions as Algorithm Arguments 119

5.8.2 Predicates 121

5.9 Function Obiects 124

5.9.1 What Are Function Objects? 124

5.9.2 Predefined Function Obiects 131

5.10 Container Elements 134

5.10. 1 Requirements for Container Elements 134

5.10.2 Value Semantics or Reference Semantics 135

5.11 Errors and Exceptions inside the ST1136

5.11.1 Error Handling 137

5.11.2 Exception Handling 139

5.12 ExtendinZ the ST1141

6 STL Containers 143

6.1 Common Container Abilities and Operations 144

6.1.1 Common Container Abilities 144

6.1.2 Common Container Operations 144

6.2 Vectors 148

6.2.1 Abilities of Vectors 148

6.2.2 Vector Operations 150

6.2.3 Using Vectors as Ordinary Arrays 155

6.2.4 Exception Handling 155

6.2.5 Examples of Using Vectors 156

6.2.6 Class vector<bool> 158

6.3 Deques 160

6.3.1 Abilities of Deques 161

6.3.2 Deque Operations 162

6.3.3 Exception Handling 164

6.3.4 Examples of Using Deques 164

6.4 Lists 166

6.4.1 Abilities of Lists 166

6.4.2 List Operations 167

6.4.3 Exception Handling 172

6.4.4 Examples of Using Lists 172

6.5 Sets and Multisets 175

6.5.1 Abilities of Sets and Multisets 176

6.5.2 Set and Multiset ODerations 177

6.5.3 Exception Handling 185

6.5.4 Examples of Using Sets and Multisets 186

6.5.5 Example of SpecifVing the Sorting Criterion at Runtime 191

6.6 Maps and Multimaps 194

6.6.1 Abilities of Maps and Multimaps 195

6.6.2 Map and Multimap Operations 196

6.6.3 Using Maps as Associative Arrays 205

6.6.4 Exception Handling 207

6.6.5 Examples of Using Maps and Multimaps 207

6.6.6 Example with Maps, Strings, and Sorting Criterion at Runtime 213

6.7 Other STL Containers 217

6.7.1 Strings as STL Containers 217

6.7.2 OrdinarV ArraVs as STL Containers 218

6.7.3 Hash Tables 221

6.8 Implementing Reference Semantics 222

6.9 When to Use which Container 226

6.10 Container TVves and Members in Detail 230

6.10.1 TVpe Dennitions 230

6.10.2 Create, Copy, and Destroy Operations 231

6.10.3 NonmodifVing Operations 233

6.10.4 Assignments 236

6.10.5 Direct Element Access 237

6.10.6 Operations to Generate lterators 239

6.10.7 Inserting and Removing Elements 240

6.10.8 Special Member Functions for Lists 244

6.10.9 Allocator Support 246

6.10.10 Overview of Exception Handling in STL Containers 248

7 ST11terators 251

7.1 Header Files for lteratofs 251

7.2 Iterator Categories 251

7.2.1 Input lterators 252

7.2.2 Output lterators 253

7.2.3 Forward lterators 254

7.2.4 Bidirectional lterators 255

7.2.5 Random Access lterators 255

7.2.6 The increment and Decrement Problem of Vector lterators 258

7.3 Auxiliary lterator Functions 259

7.3.1 Stepping lterators Using advance () 259

7.3.2 Processing lterator Distance Using distance () 261

7.3.3 Swapping lterator Values Using iter--swapo 263

7.4 Iterator Adapters 264

7.4.1 Reverse lterators 264

7.4.2 Insert lterators 271

7.4.3 Stream lterators 277

7.5 Iterator Traits 283

7.5.1 Writing Generic Functions for lterators 285

7.5.2 User--Defined lterators 288

8 STL Function Obiects 293

8.1 The Concept of Function Objects 293

8.1.1 Function Objects as Sorting Criteria 294

8.1.2 Function Objects with internal State 296

8.1.3 The Return Value of for--each () 300

8.1.4 Predicates versus Function Objects 302

8.2 Predefined Function Objects 305

8.2.1 Function Adapters 306

8.2.2 Function Adapters for Member Functions 307

8.2.3 Function Adapters for Ordinary Functions 309

8.2.4 User-Defined Function Obiects for Function Adamers 310

8.3 Supplementary ComDosing Function Objects 313

8.3.1 UnarV Compose Function Obiect Adapters 314

8.3.2 Binary Compose Function Object AdaDters 318

9 STL Algorithms 321

9.1 Algorithm Header Files 321

9.2 A12orithm Overview 322

9.2.1 A Brief introduction 322

9.2.2 Classification of Algorithms 323

9.3 AuxiliarV Functions 332

9.4 The for eacho Algorithm 334

9.5 NonmodifVing Algorithms 338

9.5.1 Counting Elements 338

9.5.2 Minimum and Maximum 339

9.5.3 Searching Elements 341

9.5.4 Comparing Ranges 356

9.6 ModifVing Algorithms 363

9.6.1 Copying Elements 363

9.6.2 Transforming and Combining Elements 366

9.6.3 Swapping Elements 370

9.6.4 Assigning New Values 372

9.6.5 Replacing Elements 375

9.7 Removing Algorithms 378

9.7.1 Removing Certain Values 378

9.7.2 Removing Duplicates 381

9.8 Mutating Algorithms 386

9.8.1 Reversing the Order of Elements 386

9.8.2 Rotating Elements 388

9.8.3 Permuting Elements 391

9.8.4 Shuffling Elements 393

9.8.5 Moving Elements to the Front 395

9.9 Sorting Algorithms 397

9.9.1 Sorting All Elements 397

9.9.2 Partial Sorting 400

9.9.3 Sorting According to the nib Element 404

9.9.4 Heap Algorithms 406

9.10 Sorted Range Algorithms 409

9.10.1 Searching Elements 410

9.10.2 Merging Elements 416

9.11 Numeric Algorithms 425

9.11.1 Processing Results 425

9.11.2 Converting Relative and Absolute Values 429

10 Special Containers 435

10.1 Stacks 435

10.1.1 The Core interface 436

10.1.2 Example of Using Stacks 437

10.1.3 Class stack<> in Detail 438

10.1.4 A User-Defined Stack Class 441

10.2 Queues 444

10.2.1 The Core interface 445

10.2.2 Example of Using Queues 446

10.2.3 Class queue<> in Detail 447

10.2.4 A User-Denned Queue Class 450

10.3 Priority Oueues 453

10.3.1 The Core interface 455

10.3.2 Example of Using Priority Queues 455

10.3.3 Class priority--queue<> in Detail 456

10.4 Bitsets 460

10.4.1 Examples of Using Bitsets 460

10.4.2 Class bitset in Detail 463

11 Strings 471

11.1 Motivation 471

11.1.1 A First Example f Extracting a Temporary File Name 472

11.1.2 A Second Example f Extracting Words and Printing Them Backward 476

11.2 Description of the String Classes 479

11.2.1 String Types 479

11.2.2 Operation Overview 481

11.2.3 Constructors and Destructors 483

11.2.4 Strings and C-Strings 484

11.2.5 Size and CaDacitV 485

11.2.6 Element Access 487

11.2.7 Comparisons 488

11.2.8 Modifiers 489

11.2.9 SubstrinZs and String Concatenation 492

11.2. 10 InpuUOutput Operators 492

11.2.11 Searching and Finding 493

11.2. 13 Iterator Support for Strings 497

11.2.14 Intemationalization 503

11.2. 15 Performance 506

11.2.16 Strings and Vectors 506

11.3 String Class in Detail 507

11.3.1 TVpe Definitions and Static Values 507

11.3.2 Create, Copy, and Destroy Operations 508

11.3.3 Operations for Size and CaDacitV 510

11.3.4 Comparisons s11

11.3.5 Character Access 512

11.3.6 Generating C-Strings and Character Arrays 513

11.3.7 ModifVing Operations 514

11.3.8 SearchinZ and Finding 520

11.3.9 Substrings and String Concatenation 524

11.3.10 Input/Output Functions 524

11.3. 11 Generating lterators 525

11.3.12 Allocator Support 526

12 Numerics 529

12.1 Complex Numbers 529

12. 1. 1 ExamDles Using Class Complex 530

12.1.2 Operations for Complex Numbers 533

12.1.3 Class complex<> in Detail 541

12.2 Valarravs 547

12.2.1 Getting to Know Valarrays 547

12.2.2 ValarraV Subsets 553

12.2.3 Class valarrav in Detail 569

12.2.4 Valarrav Subset Classes in Detail 575

12.3 Global Numeric Functions 581

13 Inputloutput Using Stream Classes 583

13.1 Common Background of I/O Streams 584

13.1.1 Stream Objects 584

13.1.2 Stream Classes 584

13.1.3 Global Stream Objects 585

13.1.4 Stream Operators 586

13.1.5 Manipulators 586

13.1.6 A Simple Example 587

13.2 Fundamental Stream Classes and Objects 588

13.2.1 Classes and Class Hierarchy 588

13.2.2 Global Stream Objects 591

13.2.3 Header Files 592

13.3 Standard Stream Operators << and >> 593

13.3.1 Output Operator << 593

13.3.2 Input Operator >> 594

13.3.3 Input/Output of Special Types 595

13.4 State of Streams 597

13.4.1 Constants for the State of Streams 597

13.4.2 Member Functions Accessing the State of Streams 598

13.4.3 Stream State and Boolean Conditions 600

13.4.4 Stream State and Exceptions 602

13.5 Standard input/Output Functions 607

13.5.1 Member Functions for input 607

13.5.2 Member Functions for Output 610

13.5.3 Example Uses 611

13.6 Manipulators 612

13.6.1 How Manipulators Work 612

13.6.2 User-Defined Manipulators 614

13.7 Formatting 615

13.7.1 Format Flags 615

13.7.2 Input/Output Format of Boolean Values 617

13.7.3 Field Width, Fill Character, and Adjustment 618

13.7.4 Positive Sign and Uppercase Letters 620

13.7.5 Numeric Base 621

13.7.6 Floating-Point Notation 623

13.7.7 General Formatting Definitions 625

13.8 Intemationalization 625

13.9 File Access 627

13.9.1 File Flags 631

13.9.2 Random Access 634

13.9.3 Using File Descriptors 637

13.10 Connecting input and OutDut Streams 637

13.10.1 Loose Coupling Using tie () 637

13.10.2 Tight Coupling Using Stream Buffers 638

13.10.3 Redirecting Standard Streams 641

13.10.4 Streams for Reading and Writing 643

13.11 Stream Classes for Strings 645

13.11.1 String Stream Classes 645

13.11.2 char* Stream Classes 649

13.12 InpuUOutput Operators for User-Defined Types 652

13.12.1 Implementing Output Operators 652

13.12.2 Implementing input Operators 654

13.12.3 Input/Output Using Auxiliary Functions 656

13.12.4 User--Denned ODerators Using Unformatted Functions 658

13.12.5 User--Defined Format Flags 659

13.12.6 Conventions for User-Defined input/Output Operators 662

13.13 The Stream Buffer Classes 663

13.13.1 User's View of Stream Buffers 663

13.13.2 Stream Buffer lterators 665

13.13.3 User-Defined Stream Buffers 668

13.14 Performance Issues 681

13.14.1 SVnchronization with C's Standard Streams 682

13.14.2 Buffering in Stream Buffers 682

13.14.3 Using Stream Buffers Directly 683

14 Internationalization 685

14.1 Different Character Encodings 686

14.1.1 Wide-Character and Multibvte Text 686

14.1.2 Character Traits 687

14.1.3 Intemationalization of Special Characters 691

14.2 The Concept of Locales 692

14.2.1 Using Locales 693

14.2.2 Locale Facets 698

14.3 Locales in Detail 700

14.4 Facets in Detail 704

14.4.1 Numeric Formatting 705

14.4.2 Time and Date Formatting 708

14.4.3 MonetarV Formatting 711

14.4.4 Character Classification and Conversion 715

14.4.5 String Collation 724

14.4.6 Internationalized Messages 725

15 Allocators 727

15.1 Using Allocators as an Application Programmer 727

15.2 Using Allocators as a Library Programmer 728

15.3 The Default Allocator 732

15.4 A UseFDefined Allocator 735

15.5 Allocators in Detail 737

15.5.1 TVpe Definitions 737

15.5.2 Operations 739

15.6 Utilities for Uninitialized Memory in Detail 740

Internet Resources 743

Bibliography 745

Index 747