使用初始化列表来初始化向量

问题描述 投票:0回答:1

我不明白为什么它不允许我使用以下语法直接初始化向量:

stl::vector<int> v{1, 2, 3};

我从头开始实现了向量和初始化列表类。

向量构造函数(还有一个默认构造函数,它将所有内容设置为 0):

vector(initializer_list<T> init) : m_capacity(init.size()), m_size(m_capacity), m_data(nullptr)
{
 this->m_data = (T *)malloc(m_size * sizeof(T));

 if (this->m_data == nullptr)
      throw "malloc: Couldn't allocate memory!\n";

 memcpy(m_data, init.begin(), m_size * sizeof(T));
}

这是我的initializer_list 类:

    template <typename T> class initializer_list 
    {
    public:
        typedef const T* const_iterator;
        typedef       T* iterator;

    private:
        iterator m_begin;
        size_t   m_size;

        constexpr initializer_list(const_iterator it, size_t size) noexcept : m_begin(it), m_size(size) { }

    public:
        constexpr initializer_list() noexcept : m_begin(nullptr), m_size(0) { }

        constexpr const_iterator begin() const { return m_begin; }

        constexpr const_iterator begin(initializer_list<T> init) noexcept { return init.begin(); }

        constexpr const_iterator end() const { return m_begin + m_size; }

        constexpr const_iterator end(initializer_list<T> init) noexcept { return init.end(); }

        constexpr size_t size() const { return m_size; }
    };

我在向量类中创建了一个单独的构造函数,它采用初始值设定项列表作为参数。但是我收到以下错误:

no instance of constructor "stl::vector<T>::vector [with T=int]" matches the argument list

c++ stl initializer-list
1个回答
0
投票

std::initializer_list
是一个无法用用户代码实现的魔术类型。

重载解析和花括号初始化器列表的特殊行为专门针对该神奇的

std::initializer_list
类型。

您无法定义自己的

initializer_list
并希望它像
std::initializer_list
一样工作。

© www.soinside.com 2019 - 2024. All rights reserved.