美文网首页
容器 - vector (2)

容器 - vector (2)

作者: 天凝散人 | 来源:发表于2019-01-20 17:36 被阅读0次

上一章:容器 - vector (1)
目录

1,iterator的作用

通过iterator,可以对一个数据体的集合进程遍历访问,而遍历的规则可以有iterator自身行为决定。比如对于连续集合或者列表集合,可以定义为前向遍历或者后向遍历,对于树结构可以进行前序,中序或者后序遍历等。

2, C++ 中的iterator

C++ 中的iterator类型,可以分为如下部分,具体链接C++Reference:

3,vector的iterator

那么对于vector iterator,要实现什么呢?
vector是一个连续存储的数组,在没有iterator的情况下,我们一般通过指针+索引来遍历一个数组。因此对于一个vector iterator,要实现以下几点基本功能:

(1)增加或者减少,可对比指针的++p或者--p
(2)随机索引,可对比指针的p+n
(3)通用属性,比如访问数据,比较,开始结束等

有了上面3点目标,我们就可以开始着手写代码了,其实就是实现一个Random Access的iterator。

template<typename T>
class MyVector
{
...
public:
    class iterator
    {
        T* p_;
    public:
        iterator() : p_(nullptr){}
        iterator(T*p ) : p_(p) {}
        iterator(const iterator& it) : p_(it.p_) {}
        iterator& operator=(const iterator& it) {p_ = it.p_; return *this;}
        iterator operator++ () {++p_; return p_;}
        iterator operator-- () {--p_; return p_;}
        iterator operator++ (int) {T* p = p_; ++p_; return p;}
        iterator operator-- (int) {T* p = p_; --p_;  return p;}
        bool operator ==(const iterator& it) {return it.p_ == p_;}
        bool operator !=(const iterator& it) {return !(it.p_ == p_);}
        T& operator *() {return *p_;}
        T* operator ->() {return p_;}
    };

    iterator begin() {return iterator(array_);}
    iterator end() {return iterator(array_ + length_);}
};

测试代码如下:

    MyVector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    std::cout << v.size() << v[0]  << v[1] << v[2] << std::endl;
    v.push_back(1);
    std::cout << v.size() << std::endl;
    for (MyVector<int>::iterator it = v.begin(); it != v.end(); ++it)
    {
        std::cout << "it = " << *it << std::endl;
    }

至此,一个基本的vector已经完成。

目录

相关文章

  • 一、容器

    (1)容器分类 <1>顺序容器(序列容器) <2>关联容器 <3>容器适配器 (2)vector容器 <1>概念 ...

  • 容器 - vector (2)

    上一章:容器 - vector (1)目录 1,iterator的作用 通过iterator,可以对一个数据体的集...

  • C++ STL 之 vectot(三)

    今天我们继续更新 C++ STL 中 vector 容器的使用 vector 容器增加元素 vector 容器增加...

  • Java同步容器和并发容器

    同步容器 在 Java 中,同步容器主要包括 2 类: Vector、Stack、HashTableCollect...

  • Java同步容器和并发容器

    同步容器 在 Java 中,同步容器主要包括 2 类: Vector、Stack、HashTableCollect...

  • 标准模板库(容器)

    vector 向量容器 List 容器 map 容器

  • Effective STL-2 vector 和 string

    part2 vector 和 string 2个最常用的容器 数组的用途是如此广泛, 设计 vector 和 st...

  • [Geekband]第六周学习笔记

    1、容器 vector容器的初始化有一下几个函数 std::vector v; std::vector v(n);...

  • Geekband-job3.1

    1、容器 vector容器的初始化有一下几个函数 std::vector v; std::vector v(...

  • STL细节

    容器分为三种1.序列性容器 vector list deque2.关联型容器 set multiset map...

网友评论

      本文标题:容器 - vector (2)

      本文链接:https://www.haomeiwen.com/subject/uegxjqtx.html