fbpx

C++: Foreach Loop

Bjarne-stroustrup
 


Loop through and print each element in a collection in order. Use your language’s “for each” loop if it has one, otherwise iterate through the collection in order with some other loop.

C++03 did not have a “for each” loop. The following is a generic loop which works with any standard container except for built-in arrays. The code snippet below assumes that the container type in question is typedef’d to container_type and the actual container object is named container.

for (container_type::iterator i = container.begin(); i != container.end(); ++i)
{
  std::cout << *i << "\n";
}

However the idiomatic way to output a container would be

std::copy(container.begin(), container.end(),
std::ostream_iterator<container_type::value_type>(std::cout, "\n"));

There’s also an algorithm named for_each. However, you need a function or function object to use it, e.g.

void print_element(container_type::value_type const& v)
{
  std::cout << v << "\n";
}
 
std::for_each(container.begin(), container.end(), print_element);
Works with: C++11

for (auto element: container)
{
  std::cout << element << "\n";
}

Here container is the container variable, element is the loop variable (initialized with each container element in turn), and auto means that the compiler should determine the correct type of that variable automatically. If the type is expensive to copy, a const reference can be used instead:

for (auto const& element: container)
{
  std::cout << element << "\n";
}

Of course the container elements can also be changed by using a non-const reference (provided the container isn’t itself constant):

for (auto&& element: container) //use a 'universal reference'
{
  element += 42;
}

SOURCE

Content is available under GNU Free Documentation License 1.2.

Our team found a curious site for our readers that are fans of online gaming, a rather exciting site that provides the latest gaming technology. Casinodots.com is the site, they compile the best reviews of MGA casino utan svensk licens sites. This site might pique your curiosity and you can win extra money!