Android Utils 之 Vector 学习笔记(三)—— Vector 与 SortedVector 代码分析

实际上在 VectorSortedVector 这两个类中,没有太多内容,主要提供了一些给外部调用的接口而已。不过也有一些需要注意的内容,比如抽象类中的纯虚函数的实现,以及自定义的比较函数等等。


相关文章


Vector

Vectoc 类继承自 VectorImpl,它的大部分功能都是通过直接内部调用父类的函数来实现的。因此这个类的结构与实现都非常简单,以至于只需要一个头文件就能全部包含。

根据代码中的注释可以知道,这一主模板 Vector 类在使用 VectorImpl 时确保了类型安全性。这个类是开放给用户使用的。这个 Vector 和标准模板库中的那个用途应该是一样的,不过在实现上应该有所不同,具体差异其实不必深究,能用就行……

类定义

文件路径:system\core\libutils\include\utils\Vector.h

代码解释:

  • 第 2 行:声明了 SortedVector 类,因为此处没有引用相应的头文件,但后面在构造函数中会用到它。
  • 第 11 行:注意此处用的是私有继承
  • 第 36~133 行:这里全是关于增、删、查找这类的基本操作的调用接口,通过函数名就可以很好地知道它的功能,如果有不清楚的地方,可以看相应函数的注释,都解释得很清楚了。
  • 第 139~143 行:声明了两个函数指针,用于指向自定义的比较函数。排序函数则负责基于比较函数对 Vector 进行排序(排序具体实现在父类中,根据前两章的分析可以知道,用的是插入排序算法)。
  • 第 153~167 行:这里声明的函数以及迭代器 iterator 是为了在一定程度上兼容 STL 中的 Vector 类。用过 STL 中的 Vector 的人应该比较熟悉这些操作了,主要就是基于 iterator 来对 Vector 中元素进行访问、控制、遍历等(注意使用 const_iterator 时不能对元素内容进行操作)。
  • 第 170~176 行:这些是父类中的纯虚函数,此处必须给出相应的具体实现。
template <typename TYPE>
class SortedVector;

/*!
 * The main templated vector class ensuring type safety
 * while making use of VectorImpl.
 * This is the class users want to use.
 */

template <class TYPE>
class Vector : private VectorImpl
{
public:
            typedef TYPE    value_type;

    /*!
     * Constructors and destructors
     */

                            Vector();
                            Vector(const Vector<TYPE>& rhs);
    explicit                Vector(const SortedVector<TYPE>& rhs);
    virtual                 ~Vector();

    /*! copy operator */
            const Vector<TYPE>&     operator = (const Vector<TYPE>& rhs) const;
            Vector<TYPE>&           operator = (const Vector<TYPE>& rhs);

            const Vector<TYPE>&     operator = (const SortedVector<TYPE>& rhs) const;
            Vector<TYPE>&           operator = (const SortedVector<TYPE>& rhs);

            /*
     * empty the vector
     */

    inline  void            clear()             { VectorImpl::clear(); }

    /*!
     * vector stats
     */

    //! returns number of items in the vector
    inline  size_t          size() const                { return VectorImpl::size(); }
    //! returns whether or not the vector is empty
    inline  bool            isEmpty() const             { return VectorImpl::isEmpty(); }
    //! returns how many items can be stored without reallocating the backing store
    inline  size_t          capacity() const            { return VectorImpl::capacity(); }
    //! sets the capacity. capacity can never be reduced less than size()
    inline  ssize_t         setCapacity(size_t size)    { return VectorImpl::setCapacity(size); }

    /*!
     * set the size of the vector. items are appended with the default
     * constructor, or removed from the end as needed.
     */
    inline  ssize_t         resize(size_t size)         { return VectorImpl::resize(size); }

    /*!
     * C-style array access
     */

    //! read-only C-style access
    inline  const TYPE*     array() const;
    //! read-write C-style access
            TYPE*           editArray();

    /*!
     * accessors
     */

    //! read-only access to an item at a given index
    inline  const TYPE&     operator [] (size_t index) const;
    //! alt
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: utils文件夹通常是存放深度学习中常用的工具函数或类的地方。这些工具函数或类可以被多个深度学习模型或代码文件共用,以提高代码复用性和可维护性。例如,可能会包含数据预处理函数、模型评估函数、损失函数等。 ### 回答2: 深度学习中的utils文件夹是一个常见的命名约定,用于存放各种功能性函数和工具类。这些函数和类通常被多个模块调用,以帮助简化代码的编写,并提供共享的可复用代码utils文件夹中的代码主要有以下几个作用: 1. 数据处理:在深度学习任务中,数据的预处理非常重要。utils文件夹中的代码包含了数据读取、数据预处理、数据增强等功能函数,帮助用户在训练和测试过程中对数据进行处理。 2. 模型操作:utils文件夹中的代码还包含了模型的加载和保存函数。深度学习模型往往具有较复杂的结构和参数,保存和加载模型是非常常见的操作。这些代码可以将训练好的模型保存到磁盘上,并在需要时加载到内存中使用。 3. 损失函数:深度学习中常用的损失函数也可以放在utils文件夹中。这些损失函数包含了交叉熵、均方误差等常用的损失计算方式。在训练模型时,可以从utils文件夹中导入相应的损失函数进行计算。 4. 工具类:utils文件夹中的代码还包括一些常用的工具类,例如计时器、日志记录器、配置文件读取器等。这些工具类可以帮助用户更方便地进行实验管理、结果记录和参数调整。 综上所述,utils文件夹在深度学习代码中的作用是提供了一系列的功能性函数和工具类,用于数据处理、模型操作、损失计算和实验管理等任务,有助于减少代码冗余、提高代码的可读性和可维护性。 ### 回答3: 深度学习代码utils文件夹通常用于存放一些通用的工具函数或辅助类,以帮助开发者更方便地进行模型训练、数据处理或结果分析等操作。具体的作用如下: 1. 数据处理:utils文件夹提供了一些数据处理的函数,例如数据加载、预处理、增强或归一化等函数。这些函数可以在数据准备阶段帮助开发者更高效地处理数据,以便进一步进行模型训练。 2. 模型工具:utils文件夹可以包含一些与模型相关的工具函数,如模型构建、网络结构定义或参数初始化等。这些函数可以提供便捷的接口,帮助开发者更快地搭建或修改模型,同时保持代码的整洁性和可维护性。 3. 训练和评估:utils文件夹常常包含用于训练和评估模型的代码。例如,训练过程中的损失函数、优化器选择、学习率调整或模型保存等操作都可以通过utils文件夹中的函数实现。同时,可以提供一些评估指标的计算函数,帮助开发者量化模型性能。 4. 可视化:utils文件夹还可以包含一些数据可视化的函数,用于展示模型训练过程中的学习曲线、结果对比或特征可视化等。这些函数有助于开发者更直观地理解和分析模型的表现,从而进行模型调优或问题定位。 总之,utils文件夹在深度学习代码中扮演了辅助工具的角色,提供了一些通用的函数和类,简化了繁琐的操作,并帮助开发者更高效地进行模型训练、数据处理和结果分析等任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值