Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 18.01.2015
Сообщений: 8

Массив фиксированного размера может быть динамическим? Что такое "динамический массив"?

31.10.2015, 16:48. Показов 4525. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть код
C++
1
2
string line;
char *dup=new char[line.length()+1];
Я так понимаю создается динамический массив фиксированного размера длинной символов line + 1 ? тогда как он может быть динамическим?

И ещё, это кусок proxy checker`a нашел на гитхабе, С стайл, пытаюсь разобраться что и как сделанно. Зачем спросите вы? Изучаю С++, просто книжку читать не могу - засыпаю, но если попытатся разобратся в небольшом интересном коде - это да - интересно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// я так понимаю ищет ":" в строке dup и возвращает ссылку на него. какую именно? числовое значение или что? Возвращает все что после ":" включительно?
                    char *pch=strchr(dup, ':');
 
                    int n=0;
                    // неясно зачем в цикле искать то что уже нашли?
                    while(pch!=NULL){
                     // Зачем +1? к чему плюсуем? к числовому значению? не понятно
                        pch = strchr(pch+1, ':');
                        n++;
                    }
                    // обнуляем
                    pch=NULL;
                    // если указатель на ":" уже есть и его мы заново ищем в цикле тот как он может быть n == 2? непонятно
                    if(n==1 || n==2){
                        // разбиваем строку на лексемы. т.е. отделяем айпи адрес (первый запуск)
                        pch = strtok(dup, ":");
                        if(pch!=NULL){
                            if(n==1) ip = pch;
                            else if(n==2) proxytype = pch;
                            pch = strtok(NULL, ":");
                            if(pch!=NULL){
                                if(n==1) port = atoi(pch);
                                else if(n==2){
                                    ip = pch;
                                    pch = strtok(NULL, ":");
                                    if(pch!=NULL)
                                        port = atoi(pch);
                                }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.10.2015, 16:48
Ответы с готовыми решениями:

Динамический массив может быть и символьным и числовым?
Получается динамический массив может одновременно содержать как числовые, так и символьные ячейки? Я понимаю что массива как такового нет и...

Динамический массив. Где может быть ошибка?
var a: array of real; i, n, choise: integer; imax, imin: integer; temp: real; begin repeat repeat ...

Что такое динамический двумерный массив?
Здравствуйте. Пытаюсь понять правильно ли вместилась эта картинка в мою голову? mass это адрес который указывает на массив указателей ,...

52
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 22:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от daslex Посмотреть сообщение
Вектор такая же фальшивка. Был бы он настоящим динамическим массивом, время вставки одного элемента в его конец было бы О(1)
здесь все абсолютно точно так же, как и у "настоящих динамических массивов".

О(1) без учета резерва (ну или не учитывая резерв).

или издержки на реалокацию,
при условии нехватки резерва.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 22:49
Цитата Сообщение от hoggy Посмотреть сообщение
(ну или не учитывая резерв).
Учитывая, не учитывая. Есть издержки - не динамика. Строго и справедливо.

Добавлено через 2 минуты
Иначе и без вектора в С++ резко появляется динамический массив.
пересоздаваемое путем создания нового, копирования и удаления старого.

Добавлено через 2 минуты
а то, что при каждом чуть ли не первом добавлении резерва не хватает - это только-лишь частный случай издержек.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 22:57
Цитата Сообщение от daslex Посмотреть сообщение
Учитывая, не учитывая. Есть издержки - не динамика. Строго и справедливо.
вы меня не услышали.

я повторюсь:
Цитата Сообщение от hoggy Посмотреть сообщение
здесь все абсолютно точно так же, как и у "настоящих динамических массивов".
невозможно построить механизм,
на который налагается требование "единый блок данных",
и при этом гарантировать отсутствие издержек.

это технически невозможно гарантировать.

я ещё раз повторюсь:
динамические массивы - не более чем синтаксический сахар.
под капотом у них там мало что отличается от обычного std::vector

просто потому, что это не какое то волшебство.
если памяти не хватает - она волшебным образом не возникнет.
придется идти на издержки:
либо реалочить блок данных контейнера,
либо сдвигать блок данных,
который встал на путях.

поэтому фраза "Есть издержки - не динамика" - противоречит здравому смыслу.

Добавлено через 5 минут
Цитата Сообщение от daslex Посмотреть сообщение
а то, что при каждом чуть ли не первом добавлении резерва не хватает - это только-лишь частный случай издержек.
дефолтная реализация разумный компромисс между быстрым разогревом резерва
с минимальными издержками,
до рабочих размеров.

однако, вам никто не запрещает взять резерв под контроль.
std::vector::reserve

либо задействовать собственный аллокатор памяти
C++
1
template < class T, class Alloc = allocator<T> >
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 22:58
Вы сами себе противоречите.
Вектор можно написать на С++ - это факт.
Вектор почти не отличается от динамического массива. - Об этом Вы
В С++ нет динамических массивов.
В С++ есть вектор, который практически динамический массив.
Вектор - это часть С++ - это неоспоримый факт.

ерунда. Это всё очень не логично.
Изложите Ваши мысли как минимум логично.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 23:03
Цитата Сообщение от daslex Посмотреть сообщение
Иначе и без вектора в С++ резко появляется динамический массив.
пересоздаваемое путем создания нового, копирования и удаления старого.
ну вы же понимаете: контейнер который реализует функционал.
массив который реализует функционал.

и ... размазанный по всему проекту код, который реализует функционал.

код есть, но нет ни массивов ни даже контейнеров реализованных на языке.

Добавлено через 4 минуты
Цитата Сообщение от daslex Посмотреть сообщение
Вектор можно написать на С++ - это факт.
ага.
Цитата Сообщение от daslex Посмотреть сообщение
Вектор почти не отличается от динамического массива. - Об этом Вы
ага.
Цитата Сообщение от daslex Посмотреть сообщение
В С++ нет динамических массивов.
ага.
Цитата Сообщение от daslex Посмотреть сообщение
В С++ есть вектор, который практически динамический массив.
ага.
кстати, очень точно: "практически".
то есть формально он конечно не динамический массив,
но с практической точки зрения - те же яйца, только сбоку.
Цитата Сообщение от daslex Посмотреть сообщение
Вектор - это часть С++ - это неоспоримый факт.
вот здесь вы ошибаетесь
вектор - часть стандартной библиотеки языка с++,
а не самого языка с++.

стандартная библиотека написана на языке с++

Цитата Сообщение от daslex Посмотреть сообщение
Это всё очень не логично.
что именно не логично?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 23:08
Цитата Сообщение от hoggy Посмотреть сообщение
ну вы же понимаете
Вообще ничего не понял.

Цитата Сообщение от hoggy Посмотреть сообщение
вектор - часть стандартной библиотеки языка с++,
А стандартная библиотека - это часть С++, ибо она, в свою очередь, включена в стандарт языка С++.

Добавлено через 2 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
что именно не логично?
Я понял где "Собака зарыта". Нелогично что часть части языка С++ - это не часть языка С++.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 23:12
Цитата Сообщение от daslex Посмотреть сообщение
А стандартная библиотека - это часть С++
нет.

Цитата Сообщение от daslex Посмотреть сообщение
ибо она, в свою очередь, включена в стандарт языка С++.
да.

стандарт описывает не только сам язык,
но и некоторые положения,
которые должны быть на нем реализованы.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 23:13
Еще про realloc нелогично.
неважно чем оперируют Сишники, важно что под капотом.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 23:18
Цитата Сообщение от daslex Посмотреть сообщение
Еще про realloc нелогично.
неважно чем оперируют Сишники, важно что под капотом.
что именно не логично?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 23:31
Цитата Сообщение от Крюгер Посмотреть сообщение
daslex,я имел в виду шаблоны stl
У Вас я прошу прощения. Вы почти правильно выразились, но недостаточно корректно.
В стандартной библиотеке шаблонов (STL).

Так пишут в учебниках.
Стандартная библиотека шаблонов (STL), добавленная стандартом С++98,
предоставляет шаблонный класс vector, являющийся альтернативой самостоятельно
создаваемым динамическим массивам.
Альтернатива - это только-лишь альтернатива. Это и есть имитация. Нельзя создать, но можно использовать альтернативу. Создать иллюзию, хорошую подделку.

Добавлено через 3 минуты
Цитата Сообщение от hoggy Посмотреть сообщение
что именно не логично?
нелогично то, что realloc довыделяет память, может и удалять с конца, а в случае издержки перевыделяет память, как и вектор, но realloc как отброс какой-то откинут, а вектор при тех же обстоятельствах описываете практически как динамический массив.

Добавлено через 2 минуты
БЛагодаря realloc массив становится динамическим (подобием вектора) (мало ли подумаете, что я realloc масивом обозвал)
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
31.10.2015, 23:44
Цитата Сообщение от daslex Посмотреть сообщение
Был бы он настоящим динамическим массивом, сложность вставки одного элемента в его конец была бы О(1)
Интересно, где есть настоящий динамический массив?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 23:45
Цитата Сообщение от daslex Посмотреть сообщение
нелогично то, что realloc довыделяет память, может и удалять с конца, а в случае издержки перевыделяет память, как и вектор, но realloc как отброс какой-то откинут, а вектор при тех же обстоятельствах описываете практически как динамический массив.
при каких "таких же обстоятельства" ?

вы различаете понятия "функции,
которые манипулируют данными" от сами "данных"?

Цитата Сообщение от daslex Посмотреть сообщение
БЛагодаря realloc массив становится динамическим (подобием вектора) (мало ли подумаете, что я realloc масивом обозвал)
реалок не может изменить размер массива.
он лишь может изменить размер блока памяти, адрес которого ему скормили.

и этот блок памяти - всего лишь кусок сырой памяти.

Добавлено через 25 секунд
Цитата Сообщение от zer0mail Посмотреть сообщение
Интересно, где есть настоящий динамический массив?
на викки есть список языков, которые их поддерживают.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 23:48
Цитата Сообщение от hoggy Посмотреть сообщение
вы различаете понятия "функции,
которые манипулируют данными" от сами "данных"?
А какая разница какая альтернатива, если она - альтернатива.

Добавлено через 35 секунд
Цитата Сообщение от zer0mail Посмотреть сообщение
Интересно, где есть настоящий динамический массив?
В жизни

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
и этот блок памяти - всего лишь кусок сырой памяти.
А вектор своими средствами памятью вообще не оперирует. :sarkazm:
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
31.10.2015, 23:49
Цитата Сообщение от hoggy Посмотреть сообщение
на викки есть список языков, которые их поддерживают.
И добавление элемента занимает O(1) независимо от их размера? Не верю.

Добавлено через 49 секунд
Цитата Сообщение от daslex Посмотреть сообщение
В жизни
Болтовня.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 23:52
Цитата Сообщение от daslex Посмотреть сообщение
А какая разница какая альтернатива, если она - альтернатива.
вы пришли в магазин купить себе телефизор.
думаете такой: щас приду домой, воткну в розетку и гляну киношку.

а вам вместо телефизора подсовывают коробку с кучей запчастей.
из которых вооружившись напильником и такой то матерью
в теории можно сделать подобие телека.

действительно, какая разница какая там альтернатива?

вектор хоть и не первый гражданин,
но это - полноценный механизм,
наделенный полноценной функциональностью.

реалок - всего лишь функция,
используя которую можно построить приличный контейнер.
или размазывать функциональность тонким слоем по всему клиентскому коду.

Добавлено через 35 секунд
Цитата Сообщение от daslex Посмотреть сообщение
А вектор своими средствами памятью вообще не оперирует
монопенисуальный фактор для пользователей.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
31.10.2015, 23:55
Ну а вектор - всего-лишь класс. Шаблонный класс. Обертка над массивом.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.10.2015, 23:57
Цитата Сообщение от zer0mail Посмотреть сообщение
И добавление элемента занимает O(1) независимо от их размера?
я ж писал выше - все так же, как и с вектором,
зависит от наличия резерва.
а его наличие зависит от стратегии управления этим резервом.

однако не существует технической возможности гарантировать,
что всегда хватит резерва под ещё один элемент.

Добавлено через 56 секунд
Цитата Сообщение от daslex Посмотреть сообщение
Обертка над массивом.
ну дык, любой динамический массив это на самом деле не более чем обертка над массивом,
который аллоцируется в динамической памяти.
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
01.11.2015, 00:03
Цитата Сообщение от hoggy Посмотреть сообщение
однако не существует технической возможности гарантировать,
что всегда хватит резерва под ещё один элемент.
О том и речь, а daslex нужен "настоящий динамический массив с O(1)", которого в природе не существует. А с резервами и vector неплохо управляется.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
01.11.2015, 00:06
Цитата Сообщение от zer0mail Посмотреть сообщение
О том и речь, а daslex нужен "настоящий динамический массив с O(1)", которого в природе не существует.
господин daslex полагает вектор имитацией,
потому что он - не является настоящим динамическим массивом.

он не понимает, что разница между "настоящим" и "вектором" только в том,
что первый - гражданин (поддержка на уровне синтаксиса языка),
а вектор - шаблонокласс (написан на языке).

но под капотом у них у обоих примерно одинаковое.
просто потому что иначе сделать невозможно.
0
2688 / 2260 / 244
Регистрация: 03.07.2012
Сообщений: 8,231
Записей в блоге: 1
01.11.2015, 00:10
Цитата Сообщение от hoggy Посмотреть сообщение
иначе сделать невозможно.
Согласен и критика уровня "это плохо, потому что нет свойства Х" (которого нет и не может быть ни у кого ) является уже не критикой, а некомпетентным трепом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.11.2015, 00:10

Что такое многомерный, динамический массив
я это понимаю так: создание такого массива доступ к элементам этого массива Option Explicit: Option Base 1 Dim...

Из динамической памяти в массив фиксированного размера
Помогите переделать массив с динамической памятью в обычный массив с фиксированным размером (макс 10) #include &lt;windows.h&gt; ...

Создать ассоциативный массив фиксированного размера
Нужно создать массив, который вел бы себя следующим образом 1. Массив должен быть фиксированного размера 2. Ключи для доступа к...

Как такое может быть и что это такое?
в маленьком превью одна картинка, открываешь совершенно другая (какая и должна быть) с чем это связано?

Как в структуре задать массив строк фиксированного размера?
Как в структуре задать массив строк фиксированного размера? я попытался так struct pupil { string a; } Оказалось я задал длину...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru