Search icon
Subscription
0
Cart icon
Close icon
You have no products in your basket yet
Arrow left icon
All Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletters
Free Learning
Arrow right icon
Learning Boost C++ Libraries

You're reading from  Learning Boost C++ Libraries

Product type Book
Published in Jul 2015
Publisher
ISBN-13 9781783551217
Pages 558 pages
Edition 1st Edition
Languages
Author (1):
Arindam Mukherjee Arindam Mukherjee
Profile icon Arindam Mukherjee

Table of Contents (19) Chapters

Learning Boost C++ Libraries
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
1. Introducing Boost 2. The First Brush with Boost's Utilities 3. Memory Management and Exception Safety 4. Working with Strings 5. Effective Data Structures beyond STL 6. Bimap and Multi-index Containers 7. Higher Order and Compile-time Programming 8. Date and Time Libraries 9. Files, Directories, and IOStreams 10. Concurrency with Boost 11. Network Programming Using Boost Asio C++11 Language Features Emulation Index

Range-based for-loops


Range-based for-loops are another syntactic convenience introduced in C++11. Range-based for-loops allow you to iterate through a sequence of values like arrays, containers, iterator ranges, and so on, without having to explicitly specify boundary conditions. It makes iterating less error-prone by obviating the need to specify boundary conditions.

The general syntax for range-based for-loop is:

for (range-declaration : sequence-expression) {
  statements;
}

The sequence expression identifies a sequence of values like an array or a container, that is to be iterated through. The range declaration identifies a variable that would represent each element from the sequence in successive iterations of the loop. Range-based for-loops automatically recognize arrays, brace-enclosed sequences of expressions, and containers with begin and end member functions that return forward iterators. To iterate through all elements in an array, you write this:

T arr[N];
...
for (const auto& elem : arr) {
  // do something on each elem
}

You can also iterate through a sequence of expressions enclosed in braces:

for (const auto& elem: {"Aragorn", "Gandalf", "Frodo Baggins"}) {
  // do something on each elem
}

Iterating through elements in a container that exposes forward iterators through begin and end member functions is not all that different:

std::vector<T> vector;
...
for (const auto& elem: vector) {
  // do something on each elem
}

The range expression declares a loop variable called elem using auto to deduce its type. This use of auto in range-based for-loops is idiomatic and common. To traverse sequences encapsulated within other kinds of objects, range-based for-loops require that two namespace-level methods, begin and end, be available and be resolved via Argument Dependent Lookup (see Chapter 2, The First Brush with Boost's Utilities). Range-based for-loops are great for traversing sequences whose lengths remain fixed during traversal.

Boost.Foreach

You can use the BOOST_FOREACH macro to emulate the basic uses of C++11's range-based for-loops:

#include <boost/foreach.hpp>

std::vector<std::string> names;
...
BOOST_FOREACH(std::string& name, names) {
  // process each elem
}

In the preceding example, we use the BOOST_FOREACH macro to iterate through the elements of a vector of strings called names, using a loop variable called name of type string. Using BOOST_FOREACH, you can iterate over arrays, containers with member functions begin and end that return forward iterators, iterator pairs, and null-terminated character arrays. Note that C++11 range-based for-loops do not readily support the last two types of sequences. On the other hand, with BOOST_FOREACH, you cannot deduce the type of the loop variable using the auto keyword.

lock icon The rest of the chapter is locked
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at €14.99/month. Cancel anytime}