1 / 1 / 0
Регистрация: 18.01.2015
Сообщений: 8

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

31.10.2015, 16:48. Показов 4595. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru