Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Range-based for loops

Use case

Iterate over binary sections without manual indexing.

Explanation

for (auto& x : container) iterates over all elements. Use const auto& for read-only access and auto& to modify elements. Works with any container that has begin()/end().

Code

#include <cstdint>
#include <iostream>
#include <vector>

int main() {

  std::vector<uint64_t> addresses = {0x1000, 0x1100, 0x1200};

  std::cout << "Addresses:\n";
  for (const auto &addr : addresses) {
    std::cout << "0x" << std::hex << addr << "\n";
  }

  for (auto &addr : addresses) {
    // Apply ASLR slide/offset.
    addr += 0x10000000;
  }

  std::cout << "After slide/offset:\n";
  for (const auto &addr : addresses) {
    std::cout << "0x" << std::hex << addr << "\n";
  }

  return 0;
}

View on GitHub.

Output

$ ./src/c++11/build/range-based-for-loops
Addresses:
0x1000
0x1100
0x1200
After slide/offset:
0x10001000
0x10001100
0x10001200