gpt4 book ai didi

c++ - 关于C++中数组模板的问题

转载 作者:行者123 更新时间:2023-11-28 00:33:32 25 4
gpt4 key购买 nike

我正在上一门类(class),向我们介绍了一些软件模式,其中之一是迭代器模式,我们被要求用 C++ 实现它。几周前,我们的教授给了我们一些示例代码,我想比我更好地理解它。首先,我将发布代码:

template <class T_,std::size_t SIZE_>
class carray {
public:
typedef T_ value_type;
typedef std::size_t size_type;
typedef T_ & reference;
typedef T_ const & const_reference;
typedef T_ * pointer;
typedef T_ const * const_pointer;
typedef T_ * iterator;
typedef T_ const * const_iterator;
typedef std::ptrdiff_t difference_type;

typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

// data store
value_type data[SIZE_];

size_type size() const { return SIZE_; }
reference operator [] ( size_type idx ) { return data[idx]; }
const_reference operator [] ( size_type idx ) const { return data[idx]; }

reverse_iterator rbegin() { return reverse_iterator( end() ); }
reverse_iterator rend() { return reverse_iterator( begin() ); }
const_reverse_iterator rbegin() const { return const_reverse_iterator( end() ); }
const_reverse_iterator rend() const { return const_reverse_iterator( begin() ); }
const_reverse_iterator crbegin() const { return const_reverse_iterator( end() ); }
const_reverse_iterator crend() const { return const_reverse_iterator( begin() ); }

iterator begin() { return data; }
iterator end() { return data + SIZE_; }
const_iterator begin() const { return data; }
const_iterator end() const { return data + SIZE_; }
const_iterator cbegin() const { return data; }
const_iterator cend() const { return data + SIZE_; }

};

在这个模板中,我们的教授定义了一堆 typedef,其中一些同时具有非常量和常量版本。首先,我想知道每个公共(public)成员的目的是什么,其次,我想知道在定义数据结构模板的上下文中,常量版本的目的是什么。

我还注意到一些成员函数被定义为“const”,我想知道这样做的目的是什么。

最佳答案

I wonder what the purpose of each of the public members are.

该类包含以下内容:

  • 类型别名:从类公开供公众使用的类型信息。

    • 非 const typedef 是非 const T 的类型别名。
    • const 类型定义是 const T 的类型别名。

    这些 typedef 很有用,因为类的用户可能需要有关类型的更多信息。通过使用类公开的typedef,他可以获得这个。这是一个很好的例子 - 考虑我们有一个模板类型并且我们需要访问底层迭代器类型的情况。通过使用公开的类型别名,我们可以访问它:

    template<class Container>
    void example(Container& c)
    {
    typename Container::iterator begin = c.begin(),
    // ^^^^^^^^^^^^^^^^^^^
    end = c.end();
    }

    I wonder what the purpose of the constant versions are.

    有时用户需要使用const 类型。因此,使用类提供的类型信息可以使这一切变得简单。

I also notice that some of the member functions are defined as 'const' and I wonder what the purpose of that is.

const 成员函数是不修改任何类数据成员的函数。

关于c++ - 关于C++中数组模板的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21842205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com