Я создаю массив размера int arr[50];
но я буду вставлять в него значение во время компиляции, например, мое решение будет вставлять в него 10 значений после выполнения некоторой функции (может появиться другое количество значений). Теперь во второй части моей программы мне нужно пройти через массив, как it should iterate <= total values of array
как в int arr[50]
моя программа сохраняет 10
значений, она должна переходить к ней только 10
раз, но как я могу получить, что в этом массиве всего 10 значений.
arr[50]=sum;
for (int ut=0; ut<=arr[100].length();ut++)
Хотя я знаю, что ut<=arr[100].length()
неверен, но его просто предположение, эта функция будет работать, если я разрешу условие таким образом.
Редактировать:
Я знаю, что мы можем использовать вектор, но я просто рассматриваю этот тип вещей, используя массив.
Спасибо за ответ
Прежде всего, массив, который вы показываете, не является "динамическим массивом". Он создан в стеке; это автоматическая переменная.
Для вашего конкретного примера вы можете сделать что-то вроде этого:
int arr[50];
// ... some code
int elem_count = sizeof(arr) / sizeof(arr[0]);
В этом случае часть sizeof(arr)
вернет общий размер массива в байтах, а sizeof(arr[0])
вернет размер одного элемента в байтах.
Тем не менее, массивы C-стиля имеют свою долю проблем. Я не говорю, что никогда их не используют, но имейте в виду, что, например, они приспосабливаются к указателям, когда они передаются как аргументы функции, а решение sizeof
выше дает вам ответ, отличный от того, который вы ищете, потому что он return sizeof(int*)
.
Что касается реальных динамически распределенных массивов (где все, что у вас есть, является указателем на этот массив), объявляется следующим образом:
int *arr = new int[50];
// ... do some stuff
delete [] arr;
то sizeof(arr)
также даст вам размер int*
в байтах, который не является тем размером, который вы ищете.
Итак, по мере того, как предлагались комментарии, если вы ищете удобный контейнер произвольного доступа, в котором вы хотите удобно и дешево отслеживать размер, используйте std::vector
или даже std::array
.
ОБНОВИТЬ
Чтобы использовать std::array
для получения эквивалентного кода в вашем вопросе:
std::array<int, 50> arr;
а затем использовать его как обычный массив. Имейте в виду, что делать что-то вроде arr[100]
не будет проверять границы, но по крайней мере вы можете получить размер массива с помощью arr.size()
.
push_back
, вы можете вызватьreserve
на него первым.