Я хочу объявить объект, который содержит массив целых чисел, примерно так: (псевдокод) "arr1D a1 [] = {1,2,3,4,5};"Это должно напечатать что-то вроде этого: "arr: 1 2 3 4 5 size: 5" Спасибо за помощь!
Вы можете использовать это, имея конструктор списка инициализатора в вашем классе.
Что-то вроде следующего:
#include <iostream>
#include <initializer_list>
class arr1D
{
protected:
int size;
int *arr;
public:
arr1D(std::initializer_list<int> input) : size(input.size())
{
int* temp = new int[size];
int index = 0;
for (const auto& it : input)
{
temp[index] = it;
++index;
}
arr = temp;
}
// reaming code...
См. В прямом эфире ЗДЕСЬ
Обратите внимание, что вам также нужен дисторкторв классе arr1D
в противном случае произойдет утечка памяти, так как в вашем классе есть член-указатель.
В качестве альтернативы используйте умные указатели , которые являются умным способом обработки динамической памяти, которую вы выделяете в куче.
См. Примеррешение ЗДЕСЬ
#include <iostream>
#include <initializer_list>
#include <memory>
class arr1D
{
protected:
int size;
std::unique_ptr<int[]> arr;
public:
arr1D(std::initializer_list<int> input) : size(input.size())
{
arr = std::unique_ptr<int[]>(new int[size]);
int index = 0;
for (const auto& it : input)
{
arr[index] = it;
++index;
}
}
.......
.......
std::ostream & operator<<(std::ostream &_return, const arr1D &a)
{
_return << "arr: ";
for (int i = 0; i< a.size; i++) std::cout << a.arr[i] << " ";
_return << "size: " << a.size;
return _return;
}
PS : Тем не менее, это больше подходит для обработки с std::vector<>
.Если вы не знаете, как это работает, см. этот вопрос .
Редактировать : поскольку упоминание @MM о передаче std::initializer_list
по значению подходит, а не по ссылкеотредактировал конструктор класса.