Iterators and Ranges

Understanding Range Categories in C++

What are the different categories of ranges in C++?

Abstract art representing computer programming

Ranges in C++ are categorized based on the capabilities of their underlying iterators. There are many different categories of range, each with a different set of capabilities. The three most common types are:

  • Forward Range: Supports one-way traversal, such as std::forward_list.
  • Bidirectional Range: Supports two-way traversal, such as std::list.
  • Random-Access Range: Supports direct access to any element, such as std::vector.

Here's an example that checks the category of different ranges:

#include <vector>
#include <list>
#include <forward_list>
#include <ranges>
#include <iostream>

template <typename T>
void Log(T Range) {
  if constexpr (std::ranges::forward_range<T>) {
    std::cout << " - Forward Range\n";
  }
  if constexpr (std::ranges::bidirectional_range<T>) {
    std::cout << " - Bidirectional Range\n";
  }
  if constexpr (std::ranges::random_access_range<T>) {
    std::cout << " - Random Access Range\n";
  }
}

int main() {
  std::cout << "std::forward_list<int>:\n";
  Log(std::forward_list<int>{1, 2, 3});

  std::cout << "\nstd::list<int>:\n";
  Log(std::list<int>{1, 2, 3});

  std::cout << "\nstd::vector<int>:\n";
  Log(std::vector<int>{1, 2, 3});
}
std::forward_list<int>:
 - Forward Range

std::list<int>:
 - Forward Range
 - Bidirectional Range

std::vector<int>:
 - Forward Range
 - Bidirectional Range
 - Random Access Range
This Question is from the Lesson:

Iterators and Ranges

This lesson offers an in-depth look at iterators and ranges, emphasizing their roles in container traversal

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

Iterators and Ranges

This lesson offers an in-depth look at iterators and ranges, emphasizing their roles in container traversal

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 125 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved