C++中stl库iterator 如何自定义

使用`std::iterator`定义自己的迭代器类型

我们可以使用`std::iterator`来定义自己的迭代器类型,例如:

```cpp

#include <iterator>

template <typename T>
class my_iterator : public std::iterator<std::forward_iterator_tag, T> {
public:
    // 构造函数    my_iterator(T* ptr) : ptr_(ptr) {}

    // 迭代器操作函数    T& operator*() const { return *ptr_; }
    T* operator->() const { return ptr_; }
    my_iterator& operator++() { ++ptr_; return *this; }
    my_iterator operator++(int) { my_iterator tmp(*this); ++ptr_; return tmp; }
    bool operator==(const my_iterator& other) const { return ptr_ == other.ptr_; }
    bool operator!=(const my_iterator& other) const { return ptr_ != other.ptr_; }

private:
    T* ptr_;
};
```

这里我们定义了一个名为`my_iterator`的迭代器类型,它继承自`std::iterator`,并指定了迭代器的类型标签为`std::forward_iterator_tag`,元素类型为`T`。我们还重载了迭代器操作函数,包括解引用、自增、相等和不等运算符等。

使用迭代器我们可以通过容器的成员函数`begin()`和`end()`来获取迭代器的起始和结束位置,例如:

```cpp#include <vector>

int main() {
    std::vector<int> vec {1, 2, 3, 4, 5};

    // 使用迭代器遍历容器    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }

    return 0;
}
```

在这个例子中,我们使用`std::vector`容器存储了一些整数,然后使用`vec.begin()`和`vec.end()`获取了迭代器的起始和结束位置,然后使用`for`循环遍历了容器中的所有元素,并输出它们的值。

需要注意的是,迭代器的类型和容器的类型必须匹配,否则会编译错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1号程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值