holyya.com
2025-09-04 08:43:10 Thursday
登录
文章检索 我的文章 写文章
C++自定义迭代器方法与示例
2023-07-04 23:05:28 深夜i     --     --
C++ 自定义 迭代器 方法 示例

C++中迭代器是一个非常重要的概念,它允许程序员通过一种通用的方式访问容器中的数据,而不用关心容器底层是如何实现的。在STL中,迭代器被广泛使用,其中包括了一些内置的迭代器,如指针迭代器、迭代器适配器等。但是,在某些情况下,C++程序员可能需要直接定义自己的迭代器类型,本文将介绍如何定义自己的迭代器方法,同时提供一个简单的示例。

一、自定义迭代器方法

在C++中定义自己的迭代器可以分为以下几个步骤:

1. 定义迭代器类:定义一个迭代器类,包括数据类型、迭代器类的名称和可访问数据的方法。

2. 定义迭代器指针类型:为了便于迭代器的使用,需要定义一个指向迭代器类的指针类型。

3. 定义迭代器所支持的操作:定义迭代器所支持的操作,如迭代器的递增和递减等。

二、自定义迭代器示例

下面是一个简单的示例,展示如何自定义迭代器类:


#include <iostream>

#include <vector>

using namespace std;

template <typename T>

class MyIterator {

public:

  typedef MyIterator<T> iterator;

  typedef T value_type;

  typedef T* pointer;

  typedef T& reference;

  typedef int difference_type;

  

  explicit MyIterator(pointer ptr) : ptr_(ptr) {}

  

  pointer operator->() const

    return ptr_;

  

  

  reference operator*() const {

    return *ptr_;

  }

  

  iterator& operator++() {

    ++ptr_;

    return *this;

  }

  

  iterator operator++(int) {

    iterator tmp(*this);

    ++ptr_;

    return tmp;

  }

  

  iterator& operator--() {

    --ptr_;

    return *this;

  }

  

  iterator operator--(int) {

    iterator tmp(*this);

    --ptr_;

    return tmp;

  }

  

  bool operator==(const iterator& other) const {

    return ptr_ == other.ptr_;

  }

  

  bool operator!=(const iterator& other) const {

    return !(*this == other);

  }

  

private:

  pointer ptr_;

};

int main() {

  vector<int> vec = {1, 2, 3, 4, 5};

  

  MyIterator<int> iter = MyIterator<int>(&vec[0]);

  MyIterator<int> end = MyIterator<int>(&vec[vec.size()]);

  

  for(; iter != end; ++iter) {

    std::cout << *iter << " ";

  }

  std::cout << std::endl;

  

  return 0;

}

该示例中的MyIterator类定义了一个模板类,其中T代表迭代器所访问的数据类型。该类包括了迭代器类的名称、数据类型和访问数据的方法。在该类内部,定义了一个指向迭代器类的指针类型。

由于我们自定义的迭代器类中已经定义了可访问数据的方法,因此我们可以通过指向容器的指针来实现对容器中元素的访问。在main()函数中,首先定义了一个vector 类型的vec容器,然后创建了一个MyIterator 类型的迭代器iter,指向vec的第一个元素。接着,定义了一个MyIterator 类型的迭代器end,指向vec的最后一个元素后面的位置。

最后,通过for循环来迭代遍历vec中的元素,打印输出了容器中的所有元素。

总结:C++中自定义迭代器可以让程序员自由掌控迭代器的实现细节,从而更加灵活地使用迭代器。在实际的编程过程中,可以利用自定义迭代器来完成一些高级的数据结构和算法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复