динамический массив с ++ без указателя

Можно ли создать динамический массив в C ++ без явного использования указателя (int array [] вместо int * array)?

то есть. что-то вроде этого:

int size = 5;
int array[];

array = new int{size};

for (int i = 0; i < size; i++)
{
array[i];
}

0

Решение

Да, конечно, это возможно:

#include <iostream>
int main()
{
[](int array[] = new int[10]) {
std::cout << "array = " << array << "\n";
delete[] array;
}();
}
2

Другие решения

Вы можете сделать это с помощью ссылка:

#include <iostream>
using namespace std;

int main()
{
int& val = *(new int[2]);
val = 1;
*(&val + 1) = 2;

cout << val << ' ' << *(&val+1)  << '\n';

delete [] (&val);

return 0;
}

Но, как вы можете видеть, это не очень читабельно и будет очень подвержен ошибкам. Лучше всего было бы просто использовать std::vector,

0

Нет, но вы можете использовать динамические типы из std библиотека, как std::vector,

Тип std::vector действуя очень похоже на массив.

Посмотри на это станд :: вектор.

0

int array[]; обязательно имеет автоматическую продолжительность хранения (в области действия функции или класса) и не может иметь динамическую продолжительность хранения.

Вы можете скрыть указатель внутри класса, как std::vector<int>,

Вы могли бы сделать что-то вроде

int (&array)[5] = reinterpret_cast<int(&)[5]>(*new int[5]);

удалить: delete [] array;

0

Короче нет. Компилятору необходимо знать размер массива, поэтому для использования выделенных в стеке массивов в c ++ он должен быть указан в объявлении. Я рекомендую вам посмотреть на STL Вектор класс вместо.

-1
По вопросам рекламы [email protected]