Как создать массив без размера?

есть массив, изначально состоящий из 1 элемента.
вводим переменную.
значение переменной присваивается элементу массива, и размер массива увеличивается на 1.
как можно реализовать эту примитивнейшую задачу? . не понимаю.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как можно создать массив разных объектов, заранее неизвестного размера?
если нужно создать несколько однотипных объектов программно то один скажем, создается кодом myobj.

Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во
Помогите с задачей: Задан вещественный массив размера N. Создать целочисленный массив такого же.
Как создать массив большого размера
В программе будет использоваться массив большого размера. Оперативная память — 512 МБ Создаю.
Как создать массив большого размера?
Мне необходимо создать массив очень большой размерности — порядка 300 строк на 29^5*5.
![]()
5870 / 4747 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
cancoder,
1) можно использовать не массив, а List, он может быть даже пустым и поддерживает добавление/удаление элементов
2) если нужен именно массив, то есть метод Array.Resize(ref array, int newSize), изменяющий размер массива
Покинул форум
3670 / 1481 / 355
Регистрация: 07.05.2015
Сообщений: 2,903

Сообщение было отмечено cancoder как решение
Решение
Небольшая демка:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
using System; using System.Linq; internal sealed class Program { static void Main() { Int32[] arr = {}; Console.WriteLine("Текущий размер массива : ", arr.Length); arr = (arr ?? Enumerable.EmptyInt32>()).Concat(Enumerable.Repeat(1, 1)).ToArray(); Console.WriteLine("Размер массива после изменения : ", arr.Length); Console.Write("Элементы массива: "); foreach (Int32 i in arr) Console.Write(i); Array.Resize(ref arr, 5); Console.WriteLine("\nРазмер массива стал : ", arr.Length); Console.Write("Элементы массива: "); foreach (Int32 i in arr) Console.Write(" ", i); arr = arr.Where(i => i != 0 && i != 1).ToArray(); Console.WriteLine("\nРазмер массива : ", arr.Length); } }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Из двух упорядоченных массивов размера n и m соответственно создать упорядоченный массив размера n+m
Из двух числовых упорядоченных одномерных массивов размера n и m соответственно создать.
Как создать массив или вектор размера больше чем 0x7fffffff?
Вопрос вот в чем.. максимальная разрядность сетки блоков нитей 2^31-1 на GPU (используя CUDA на.
Массив без размера
void in(bibl, int&); что означает bibl ?
Динамический массив без размера
День добрый, сразу к делу: Создаю я значит массив, а размер не указываю, одной кнопочкой добавляю.
Или воспользуйтесь поиском по форуму:
Как создать массив не зная его размер с
Кроме отдельных динамических объектов в языке C++ мы можем использовать динамические массивы. Для выделения памяти под динамический массив также используется оператор new , после которого в квадратных скобках указывается, сколько массив будет содержать объектов:
int *numbers ; // динамический массив из 4 чисел // или так // int *numbers = new int[4];
Причем в этом случае оператор new также возвращает указатель на объект типа int — первый элемент в созданном массиве.
В данном случае определяется массив из четырех элементов типа int, но каждый из них имеет неопределенное значение. Однако мы также можем инициализировать массив значениями:
int *numbers1 >; // массив состоит из чисел 0, 0, 0, 0 int *numbers2 >; // массив состоит из чисел 1, 2, 3, 4 int *numbers3 >; // массив состоит из чисел 1, 2, 0, 0 // аналогичные определения массивов // int *numbers1 = new int[4]<>; // массив состоит из чисел 0, 0, 0, 0 // int *numbers1 = new int[4](); // массив состоит из чисел 0, 0, 0, 0 // int *numbers2 = new int[4]< 1, 2, 3, 4 >; // массив состоит из чисел 1, 2, 3, 4 // int *numbers3 = new int[4]< 1, 2 >; // массив состоит из чисел 1, 2, 0, 0
При инициализации массива конкретными значениями следует учитывать, что если значений в фигурных скобках больше чем длина массива, то оператор new потерпит неудачу и не сможет создать массив. Если переданных значений, наоборот, меньше, то элементы, для которых не предоставлены значения, инициализируются значением по умолчанию.
Стоит отметить, что в стандарт С++20 добавлена возможность выведения размера массива, поэтому, если применяется стандарт С++20, то можно не указывать длину массива:
int *numbers >; // массив состоит из чисел 1, 2, 3, 4
После создания динамического массива мы сможем с ним работать по полученному указателю, получать и изменять его элементы:
int *numbers >; // получение элементов через синтаксис массивов std::coutПричем для доступа к элементам динамического массива можно использовать как синтаксис массивов ( numbers[0] ), так и операцию разыменования ( *numbers )
Соответственно для перебора такого массива можно использовать различные способы:
unsigned n< 5 >; // размер массива int* p < new int[n] < 1, 2, 3, 4, 5 >>; // используем индексы for (unsigned i<>; i < n; i++) < std::cout std::cout ; i < n; i++) < std::cout std::cout ; q != p + n; q++) < std::cout std::coutОбратите внимание, что для задания размера динамического массива мы можем применять обычную переменную, а не константу, как в случае со стандартными массивами.
Для удаления динамического массива и освобождения его памяти применяется специальная форма оператора delete :
delete [] указатель_на_динамический_массив;#include int main() < unsigned n< 5 >; // размер массива int* p < new int[n] < 1, 2, 3, 4, 5 >>; // используем индексы for (unsigned i<>; i < n; i++) < std::cout std::cout
Чтобы после освобождения памяти указатель не хранил старый адрес, также рекомендуется обнулить его:
delete [] p; p = nullptr; // обнуляем указательМногомерные массивы
Также мы можем создавать многомерные динамические массивы. Рассмотрим на примере двухмерных массивов. Что такое по сути двухмерный массив? Это набор массив массивов. Соответственно, чтобы создать динамический двухмерный массив, нам надо создать общий динамический массив указателей, а затем его элементы - вложенные динамические массивы. В общем случае это выглядит так:
#include int main() < unsigned rows = 3; // количество строк unsigned columns = 2; // количество столбцов int** numbers>; // выделяем память под двухмерный массив // выделяем память для вложенных массивов for (unsigned i<>; i < rows; i++) < numbers[i] = new int[columns]<>; > // удаление массивов for (unsigned i<>; i < rows; i++) < delete[] numbers[i]; >delete[] numbers; >Вначале выделяем память для массива указателей (условно таблицы):
int** numbers>;Затем в цикле выделяем память для каждого отдельного массива (условно строки таблицы):
numbers[i] = new int[columns]<>;Освобождение памяти идет в обратном порядке - сначала освобождаем память для каждого отдельного вложенного массива, а затем для всего массива указателей.
Пример с вводом и выводом данных двухмерного динамического массива:
#include int main() < unsigned rows = 3; // количество строк unsigned columns = 2; // количество столбцов int** numbers>; // выделяем память под двухмерный массив for (unsigned i<>; i < rows; i++) < numbers[i] = new int[columns]<>; > // вводим данные для таблицы rows x columns for (unsigned i<>; i < rows; i++) < std::cout ; j < columns; j++) < std::cout > numbers[i][j]; > > // вывод данных for (unsigned i<>; i < rows; i++) < // выводим данные столбцов i-й строки for (unsigned j<>; j < columns; j++) < std::cout std::cout for (unsigned i<>; i < rows; i++) < delete[] numbers[i]; >delete[] numbers; >Пример работы программы:
Enter data for 1 row 1 column: 2 2 column: 3 Enter data for 2 row 1 column: 4 2 column: 5 Enter data for 3 row 1 column: 6 2 column: 7 2 3 4 5 6 7Указатель на массив
От типа int** , который представляет указатель на указатель (pointer-to-pointer) следует отличать ситуацию "указатель на массив" (pointer to array). Например:
#include int main() < unsigned n; // количество строк int (*a)[2] = new int[n][2]; int k<>; // устанавливаем значения for (unsigned i<>; i < n; i++) < // устанавливаем данные для столбцов i-й строки for (unsigned j<>; j < 2; j++) < a[i][j] = ++k; >> // вывод данных for (unsigned i<>; i < n; i++) < // выводим данные столбцов i-й строки for (unsigned j<>; j < 2; j++) < std::cout std::cout // удаляем данные delete[] a; a = nullptr; >Здесь запись int (*a)[2] представляет указатель на массив из двух элементов типа int. Фактически мы можем работать с этим объектом как с двухмерным массивом (таблицей), только количество столбцов в данном случае фиксировано - 2. И память для такого массива выделяется один раз:
int (*a)[2] = new int[n][2];То есть в данном случае мы имеем дело с таблице из n строк и 2 столцов. Используя два индекса (для строки и столца), можно обращаться к определенному элементу, установить или получить его значение. Консольный вывод данной программы:
1 2 3 4 5 6Как сделать массив если не знаешь его размера с++?
Стоит задача посчитать все значения функции игрек при иксах от n до n2, чтобы потом собрать это все в массив и узнать какой из элементов максимальный. Так вот, вопрос:
1. Как создать массив если не знаешь его длины?
2. Как высчитать из этого максимальный элемент?
первый вопрос меня волнует больше, в гугле искал, не нашел ответов там
- Вопрос задан более трёх лет назад
- 489 просмотров
Комментировать
Решения вопроса 2

Вектор в C++
— это замена стандартному динамическому массиву, память для которого выделяется вручную, с помощью оператора new.
Разработчики языка рекомендуют в использовать именно vector вместо ручного выделения памяти для массива. Это позволяет избежать утечек памяти и облегчает работу программисту.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Создание массива не зная его будущий размер
Задача такова, вводится последовательность чисел оканчивающаяся нулем, например: 1 2 3 4 5 0, так вот, я не имею понятия сколько будет продолжаться ввод чисел отличных от нуля. Я хочу эти числа хранить в массиве. По логике я:
// объявляю массив. int[] array; // решаю наполнять его через цикл. int i = 0; int j = scanner.nextInt(); while (j != 0)
По мне очень логичное решение. Я понимаю, что если j изначально будет 0, то массива так и останется неинициализированным. По итогу, как поступают в данном случае? Спасибо!
Отслеживать
задан 6 фев 2021 в 7:09
53 7 7 бронзовых знаков
Неплохо бы язык указать. А то например на js с этим никаких проблем нет.
6 фев 2021 в 7:14
создают массив с одним элементом. если вставляется второе значение, то создают новый массив (больше по размеру), копируют старый в новый, удаляют старый