Как инициализировать динамический массив в конструкторе, используя initializer_ist? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь инициализировать динамический массив в конструкторе, используя initialize_list в C ++. Как мне этого добиться?

#include <cstdlib> 
#include <initializer_list>
#include <iostream>
#include <utility>

using namespace std;

class vec {
private:
    // Variable to store the number of elements contained in this vec.
    size_t elements;
    // Pointer to store the address of the dynamically allocated memory.
    double *data;

public:
    /*
      * Constructor to create a vec variable with the contents of 'ilist'.
    */
    vec(initializer_list<double> ilist);
}

int main() {
    vec x = { 1, 2, 3 };  // should call to the constructor 
    return 0;
}

Ответы [ 2 ]

2 голосов
/ 29 мая 2019

Используйте стандартный контейнер std::vector вместо необработанного указателя. std::vector - это оболочка для динамического массива, в которой есть конструктор, принимающий std::initializer_list в качестве входных данных.

#include <initializer_list>
#include <iostream>
#include <vector>
using namespace std;

class vec {
private:
    vector<double> data;

public:
    vec(initializer_list<double> ilist) : data(ilist) {}
};
1 голос
/ 29 мая 2019

initializer_list имеет метод size, он дает вам информацию, сколько элементов должно быть выделено new, поэтому это может быть:

vec(initializer_list<double> ilist)
{
    elements = ilist.size();
    data = new double[ ilist.size() ];
    std::copy(ilist.begin(),ilist.end(),data);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...