What are iterator types in C++?

What are iterator types in C++ and how do I use them?

Iterator types in C++ define how iterators access elements in a container. The most common types are:

  • Input Iterator: Read elements from a sequence.
  • Output Iterator: Write elements to a sequence.
  • Forward Iterator: Traverse a sequence in one direction.
  • Bidirectional Iterator: Traverse a sequence in both directions.
  • Random Access Iterator: Access any element in constant time.

In most cases, using auto for the return type of begin() and end() is sufficient. However, if you need to specify the type explicitly, you can use the iterator type provided by the container. Here's how to do it with std::vector:

#include <vector>
#include <string>

class Player {
public:
  Player(std::string Name) : mName(Name) {}
  std::string GetName() const { return mName; }
private:
  std::string mName;
};

class Party {
public:
  void AddMember(const std::string& NewMember) {
    PartyMembers.emplace_back(NewMember);
  }

  std::vector<Player>::iterator begin() {
    return PartyMembers.begin();
  }
  
  std::vector<Player>::iterator end() {
    return PartyMembers.end();
  }

private:
  std::vector<Player> PartyMembers;
};

int main() {
  Party MyParty;
  MyParty.AddMember("Legolas");
  MyParty.AddMember("Gimli");
  MyParty.AddMember("Frodo");

  for (const auto& Player : MyParty) {
    std::cout << Player.GetName() << '\n';
  }
}
Legolas
Gimli
Frodo

Implementing Ranges for Custom Types

Learn to implement iterators in custom types, and make them compatible with range-based techniques.

Questions & Answers

Answers are generated by AI models and may not have been reviewed. Be mindful when running any code on your device.

Implementing Iterators in Custom Types
How can I implement iterators for my custom types in C++?
How do I assert a type is a range in C++?
How can I ensure my custom type is a valid range in C++?
How to use range-based for loops in C++?
How can I use range-based for loops with my custom types in C++?
How to create a custom collection with iterators in C++?
How do I create a custom collection with iterators in C++?
How to use concepts with custom ranges in C++?
How can I use concepts to ensure my custom type is a valid range in C++?
Or Ask your Own Question
Get an immediate answer to your specific question using our AI assistant