Использование списка инициализаторов для инициализации вектораC++

Программы на C++. Форум разработчиков
Anonymous
Использование списка инициализаторов для инициализации вектора

Сообщение Anonymous »

Я не могу понять, почему мне не удается напрямую инициализировать вектор, используя следующий синтаксис:

Код: Выделить всё

stl::vector v{1, 2, 3};
Я реализовал с нуля классы вектора и списка инициализаторов.
Конструктор вектора (есть также конструктор по умолчанию который просто устанавливает все в 0):

Код: Выделить всё

vector(initializer_list 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  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 init) noexcept { return init.begin(); }

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

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

constexpr size_t size() const { return m_size; }
};
Я создал отдельный конструктор в классе векторов, который принимает список инициализаторов в качестве параметра. Однако я получаю следующую ошибку:

Код: Выделить всё

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


Подробнее здесь: https://stackoverflow.com/questions/787 ... t-a-vector

Вернуться в «C++»