万本电子书0元读

万本电子书0元读

顶部广告

Mastering the C++17 STL电子书

售       价:¥

37人正在读 | 0人评论 9.8

作       者:Arthur O'Dwyer

出  版  社:Packt Publishing

出版时间:2017-09-28

字       数:57.2万

所属分类: 进口书 > 外文原版书 > 电脑/网络

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
This book breaks down the C++ STL, teaching you how to extract its gems and apply them to your programming. About This Book ? Boost your productivity as a C++ developer with the latest features of C++17 ? Develop high-quality, fast, and portable applications with the varied features of the STL ? Migrate from older versions (C++11, C++14) to C++17 Who This Book Is For This book is for developers who would like to master the C++ STL and make full use of its components. Prior C++ knowledge is assumed. What You Will Learn ? Make your own iterator types, allocators, and thread pools. ? Master every standard container and every standard algorithm. ? Improve your code by replacing new/delete with smart pointers. ? Understand the difference between monomorphic algorithms, polymorphic algorithms, and generic algorithms. ? Learn the meaning and applications of vocabulary type, product type and sum type. In Detail Modern C++ has come a long way since 2011. The latest update, C++17, has just been ratified and several implementations are on the way. This book is your guide to the C++ standard library, including the very latest C++17 features. The book starts by exploring the C++ Standard Template Library in depth. You will learn the key differences between classical polymorphism and generic programming, the foundation of the STL. You will also learn how to use the various algorithms and containers in the STL to suit your programming needs. The next module delves into the tools of modern C++. Here you will learn about algebraic types such as std::optional, vocabulary types such as std::function, smart pointers, and synchronization primitives such as std::atomic and std::mutex. In the final module, you will learn about C++'s support for regular expressions and file I/O. By the end of the book you will be proficient in using the C++17 standard library to implement real programs, and you'll have gained a solid understanding of the library's own internals. Style and approach This book takes a concise but comprehensive approach to explaining and applying the C++ STL, one feature at a time.
目录展开

Title Page

Copyright

Mastering the C++17 STL

Credits

About the Author

About the Reviewer

www.PacktPub.com

Why subscribe?

Customer Feedback

Preface

What this book covers

What you need for this book

Who this book is for

Conventions

Reader feedback

Customer support

Downloading the example code

Errata

Piracy

Questions

Classical Polymorphism and Generic Programming

Concrete monomorphic functions

Classically polymorphic functions

Generic programming with templates

Summary

Iterators and Ranges

The problem with integer indices

On beyond pointers

Const iterators

A pair of iterators defines a range

Iterator categories

Input and output iterators

Putting it all together

The deprecated std::iterator

Summary

The Iterator-Pair Algorithms

A note about headers

Read-only range algorithms

Shunting data with std::copy

Variations on a theme - std::move and std::move_iterator

Complicated copying with std::transform

Write-only range algorithms

Algorithms that affect object lifetime

Our first permutative algorithm: std::sort

Swapping, reversing, and partitioning

Rotation and permutation

Heaps and heapsort

Merges and mergesort

Searching and inserting in a sorted array with std::lower_bound

Deleting from a sorted array with std::remove_if

Summary

The Container Zoo

The notion of ownership

The simplest container: std::array<T, N>

The workhorse: std::vector<T>

Resizing a std::vector

Inserting and erasing in a std::vector

Pitfalls with vector<bool>

Pitfalls with non-noexcept move constructors

The speedy hybrid: std::deque<T>

A particular set of skills: std::list<T>

What are the special skills of std::list?

Roughing it with std::forward_list<T>

Abstracting with std::stack<T> and std::queue<T>

The useful adaptor: std::priority_queue<T>

The trees: std::set<T> and std::map<K, V>

A note about transparent comparators

Oddballs: std::multiset<T> and std::multimap<K, V>

Moving elements without moving them

The hashes: std::unordered_set<T> and std::unordered_map<K, V>

Load factor and bucket lists

Where does the memory come from?

Summary

Vocabulary Types

The story of std::string

Tagging reference types with reference_wrapper

C++11 and algebraic types

Working with std::tuple

Manipulating tuple values

A note about named classes

Expressing alternatives with std::variant

Visiting variants

What about make_variant? and a note on value semantics

Delaying initialization with std::optional

Revisiting variant

Infinite alternatives with std::any

std::any versus polymorphic class types

Type erasure in a nutshell

std::any and copyability

Again with the type erasure: std::function

std::function, copyability, and allocation

Summary

Smart Pointers

The origins of smart pointers

Smart pointers never forget

Automatically managing memory with std::unique_ptr<T>

Why C++ doesn't have the finally keyword

Customizing the deletion callback

Managing arrays with std::unique_ptr<T[]>

Reference counting with std::shared_ptr<T>

Don't double-manage!

Holding nullable handles with weak_ptr

Talking about oneself with std::enable_shared_from_this

The Curiously Recurring Template Pattern

A final warning

Denoting un-special-ness with observer_ptr<T>

Summary

Concurrency

The problem with volatile

Using std::atomic<T> for thread-safe accesses

Doing complicated operations atomically

Big atomics

Taking turns with std::mutex

"Taking locks" the right way

Always associate a mutex with its controlled data

Special-purpose mutex types

Upgrading a read-write lock

Downgrading a read-write lock

Waiting for a condition

Promises about futures

Packaging up tasks for later

The future of futures

Speaking of threads...

Identifying individual threads and the current thread

Thread exhaustion and std::async

Building your own thread pool

Improving our thread pool's performance

Summary

Allocators

An allocator is a handle to a memory resource

Refresher - Interfaces versus concepts

Defining a heap with memory_resource

Using the standard memory resources

Allocating from a pool resource

The 500 hats of the standard allocator

Carrying metadata with fancy pointers

Sticking a container to a single memory resource

Using the standard allocator types

Setting the default memory resource

Making a container allocator-aware

Propagating downwards with scoped_allocator_adaptor

Propagating different allocators

Summary

Iostreams

The trouble with I/O in C++

Buffering versus formatting

Using the POSIX API

Using the standard C API

Buffering in the standard C API

Formatting with printf and snprintf

The classical iostreams hierarchy

Streaming and manipulators

Streaming and wrappers

Solving the sticky-manipulator problem

Formatting with ostringstream

A note on locales

Converting numbers to strings

Converting strings to numbers

Reading a line or word at a time

Summary

Regular Expressions

What are regular expressions?

A note on backslash-escaping

Reifying regular expressions into std::regex objects

Matching and searching

Pulling submatches out of a match

Converting submatches to data values

Iterating over multiple matches

Using regular expressions for string replacement

A primer on the ECMAScript regex grammar

Non-consuming constructs

Obscure ECMAScript features and pitfalls

Summary

Random Numbers

Random numbers versus pseudo-random numbers

The problem with rand()

Solving problems with <random>

Dealing with generators

Truly random bits with std::random_device

Pseudo-random bits with std::mt19937

Filtering generator outputs with adaptors

Dealing with distributions

Rolling dice with uniform_int_distribution

Generating populations with normal_distribution

Making weighted choices with discrete_distribution

Shuffling cards with std::shuffle

Summary

Filesystem

A note about namespaces

A very long note on error-reporting

Using <system_error>

Error codes and error conditions

Throwing errors with std::system_error

Filesystems and paths

Representing paths in C++

Operations on paths

Statting files with directory_entry

Walking directories with directory_iterator

Recursive directory walking

Modifying the filesystem

Reporting disk usage

Summary

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部