|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
||||||
Можно ли обойти динамический массив не зная его размер?11.04.2016, 02:13. Показов 14314. Ответов 79
Метки нет (Все метки)
1
|
||||||
| 11.04.2016, 02:13 | |
|
Ответы с готовыми решениями:
79
Можно ли создать массив, изначально не зная его размерности? Можно ли задать массив, не зная заранее его длину? |
|
161 / 153 / 92
Регистрация: 18.11.2015
Сообщений: 677
|
||||||
| 11.04.2016, 02:42 | ||||||
|
Есть идейка, например, если вы поместите в конец массива определенное число (предварительно добавив там еще место для еще одного значения), при нахождении которого цикл будет прекращен, это неудобно, потому что, если, например, в начале где-то в массив будет введено то самое "останавливающие" число, то пройтись по нему не получится и память лишняя расходуется. Но в конце концов, count не нужен.
Вот пример:
0
|
||||||
|
Падаван С++
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
||||||
| 11.04.2016, 03:00 | ||||||
|
Если массив весь заполнен то можно вот так
1
|
||||||
|
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
|
|
| 11.04.2016, 04:02 | |
|
решил дыру сваять ? ))
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|
| 11.04.2016, 04:46 | |
|
0
|
|
|
8 / 8 / 5
Регистрация: 28.10.2012
Сообщений: 135
|
|||||||
| 11.04.2016, 11:45 [ТС] | |||||||
Вот нашёл такой способ, но он не рабочий =): //проблема в том что если цикл выходит за массив, указатель pArr содержит кучу, которая может быть как "true"
0
|
|||||||
|
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
|
|
| 11.04.2016, 12:27 | |
|
Вы, может быть, видели иногда в примерах, как в функцию передают два параметра сразу - указатель и размерность. Это делается по той причине, что есть масса возможных проблем с вычислением корректной длины массива, в том числе и sizeof способа.
Поэтому, если Вы хотите куда либо передавать такие значения, передавайте еще и размерность. Если нет необходимости использовать именно стандартный массив, используйте std::vector - это сильно упростит Вам жизнь.
1
|
|
| 11.04.2016, 12:32 | |
|
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 11.04.2016, 12:37 | |
|
nofx,
1) динамического массива не существует 2) не используйте сырые указатели 3) если п.2 нужен по ТЗ, пишите класс-обёртку, который будет иметь методы begin, end
1
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.04.2016, 12:52 | |
|
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 11.04.2016, 13:03 | |
|
nmcf, массив в С++ имеет статический размер по определению, так называемая динамика достигается созданием нового массива и копирования с старого данных.
0
|
|
|
Комп_Оратор)
|
||
| 11.04.2016, 13:38 | ||
|
Динамический массив, это действительно миф. Массив (регулярный кусок) памяти выделенный динамически, это то, что называют динамическим массивом. И это древнее зло. Поэтому на вопрос:
Если в прямом смысле,то да. Оказаться за массивом выделенной памяти очень просто. Даже если массив имеет размер равный максимальному значению для индекса, то обращение по максимальному значению индекса будет обращением к памяти, которая находится сразу за последним элементом. Так как индексация начинается с нуля. То есть обойти массив (памяти) всегда можно. Но ни один компилятор не определяет направление обхода: "слева" или "справа".
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.04.2016, 13:43 | |
|
rikimaru2013, на эту тему регулярно спорят здесь. Статический/динамический - характеристика способа выделения памяти, а не свойство массива изменять размер.
0
|
|
|
Комп_Оратор)
|
|||||||
| 11.04.2016, 16:35 | |||||||
0
|
|||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.04.2016, 16:48 | |
|
IGPIGP, а ты ещё дальше пошёл, теперь уже понятие массив оспаривается. Т. е. массив не может быть в памяти, выделенной new? А если он внутри структуры?
0
|
|
|
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
|
|
| 11.04.2016, 17:23 | |
|
0
|
|
|
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
|
|
| 11.04.2016, 17:30 | |
|
0
|
|
|
Комп_Оратор)
|
|||||||
| 11.04.2016, 19:09 | |||||||
![]() Цитату Липмана не смог прочесть. ![]() ps вопрос темы сводится к тому, можно ли узнать размер выделенной динамически области, имея только указатель на неё. Ответ очевиден.
1
|
|||||||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 11.04.2016, 19:11 | |
|
С точки зрения структур данных это массив. Вот о чём я. А то, что размер нельзя получить - не так важно.
0
|
|
|
Комп_Оратор)
|
||
| 11.04.2016, 19:19 | ||
0
|
||
| 11.04.2016, 19:19 | |
|
Помогаю со студенческими работами здесь
20
Как правильно передать динамический массив в функцию, увеличивающую его размер, чтобы изменения сохранились
Создать массив с нулями и единицами в шахматном порядке, что бы его размер можно было вводить с клавиатуры
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 31.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 30.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|