Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.09.2014, 20:34   #21
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Эм, я не писла вроде бы что вектор надо называть массивом наоборот.
Я писал что впринципе можно притянуть за уши определения. Это не значит что так делать нужно постоянно.

Кстати, в каком языке есть динамические массивы, по вашему?
Просто так безболезненно массив расширяться никак не может, язык тут не при чем. Ну разве что realloc-ом каким-нибудь, но это не всегда сработает, в общем случае это все равно будет delete[] и new. В любом языке. Ну может быть оно будет спрятано в красивую обертку (и скорее всего с интерфейсом контейнера).

Цитата:
А нас ведь и другие люди тоже читают. Некоторые новички. Не нужно прививать им дурных наклонностей.
Ну новичкам ИМХО достаточно знать, что есть вектор, который можно использовать вместо массива, если размер массива должен расти во время выполнения и часто используется произвольный доступ, например. Ну тоесть в качестве динамического массива. Мир не ограничивается стандартом, придеца читать и другие книжки с "неправильной" с точки зрения стандарта плюсов терминологией и искать аналоги.

"Байду" то тут не только я развожу же. Новички дальше девятого сообщения все равно читать не будут.

Последний раз редактировалось rrrFer; 02.09.2014 в 20:36.
rrrFer вне форума Ответить с цитированием
Старый 02.09.2014, 21:02   #22
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Эм, я не писла вроде бы что вектор надо называть массивом наоборот.
Я писал что впринципе можно притянуть за уши определения. Это не значит что так делать нужно постоянно.
За уши можно притянуть собственные домыслы.
Определения - продукт стандарта.


Цитата:
Сообщение от rrrFer Посмотреть сообщение
Кстати, в каком языке есть динамические массивы, по вашему?
Например, язык ДИ:

Код:
import std.stdio;
 
void main()
{
    int[] a = [1,2,3,4];
    int[] b = [5,6];
    auto c = a ~ b;
    writeln(c); // [1,2,3,4,5,6]
 
    writeln(c.length);  // 6
 
    int* ptr_c = c.ptr;
    ptr_c[0] = 3;
    writeln(c); // [3,2,3,4,5,6]
}


Цитата:
Сообщение от rrrFer Посмотреть сообщение
Просто так безболезненно массив расширяться никак не может, язык тут не при чем.
Это не суть. Суть в том, что на языке с++ динамических массивов вообще не существует.

Его не существует как типа.
Его не существует как явления.

Пользовательский тип (class или template<param> class) я и сам завелосипедить могу. От этого ни мой велосипед, ни стандартный контейнер массивами не становятся.

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Ну новичкам ИМХО достаточно знать, что есть вектор, который можно использовать вместо массива, если размер массива должен расти во время выполнения и часто используется произвольный доступ, например. "Байду" то тут не только я развожу же. Новички дальше девятого сообщения все равно читать не будут.
О том, чем на самом деле являются указатель, массив, ссылка на массив, и не понятная ботва в правой части:
Код:
int* ptr = new int[numbers];
Лично я впервый раз задумался, когда встретил в интернетах дисскусию о том, что динамических массивов на плюсах не существует.

И вот тогда я начал думать, копать, и понял разницу между этими явлениями.

И судя потому что я - не первый, и судя по этой теме, как минимум по трем её участникам, я вижу - недопонимание существует.

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



А по поводу новичков: для начала было бы не плохо называть вектор вектором, когда вы имеете ввиду вектор.

Массив массивом, когда вы имеете ввиду массив.

А указатель указателем, когда вы имеете ввиду указатель.

Тогда и новичкам будет проще во всем этом разобраться.
_Bers вне форума Ответить с цитированием
Старый 03.09.2014, 06:19   #23
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Определения - продукт стандарта.
Ну я последний раз пишу, что мир стандартом не заканчивается и существует вне зависимости от Страуструпа и его поделок.

Был в средневековье т.н. "спор об универсалиях". Были там типы, которые говорили что сначала появляется понятие, а потом объект, а были другие - утверждали, что сначала появляется объект, а потом ему придумывают определение. Не совсем то, но напомнило.

Последний раз редактировалось rrrFer; 03.09.2014 в 06:24.
rrrFer вне форума Ответить с цитированием
Старый 03.09.2014, 07:03   #24
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Ребята, не смешите мои тапочки "У массивов нет конструктоктора" - ха-ха-ха.
Адрес строки массива вычисляется по формуле: X / N + m где X - линейный блок в памяти, N - основание массива, m - остаток от деления (позиция в строке). Если-бы конструктора не существовало, то и такая запись как X[a][b] была-бы невозможна. Пришлось бы каждый раз писать X(addr = X / N + m + sm). К тому-же ещё и смещене в физических адресах добавлять. Ну приколисты, хоть плачь, хоть смейся.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 03.09.2014, 09:55   #25
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Адрес строки массива вычисляется по формуле: X / N + m где X - линейный блок в памяти, N - основание массива, m - остаток от деления (позиция в строке). Если-бы конструктора не существовало, то и такая запись как X[a][b] была-бы невозможна. Пришлось бы каждый раз писать X(addr = X / N + m + sm).
Это к конструктору отношения не имеет.
Цитата:
К тому-же ещё и смещене в физических адресах добавлять.
С физ адресом мы давно уже не работаем, так что ничего не надо добавлять.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.09.2014, 19:19   #26
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Ребята, не смешите мои тапочки "У массивов нет конструктоктора" - ха-ха-ха.
Адрес строки массива вычисляется по формуле: X / N + m где X - линейный блок в памяти, N - основание массива, m - остаток от деления (позиция в строке). Если-бы конструктора не существовало, то и такая запись как X[a][b] была-бы невозможна. Пришлось бы каждый раз писать X(addr = X / N + m + sm). К тому-же ещё и смещене в физических адресах добавлять. Ну приколисты, хоть плачь, хоть смейся.
Казалось бы... при чем тут конструктор?

...смешались в кучу кони, люди...
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить новую пустую строку (для заполнения данными) в DBGridEh? sergeykom Компоненты Delphi 0 13.04.2014 17:48
Передать Variant и Массив в функцию VBA sir.andrey Помощь студентам 0 13.04.2013 06:23
Как передать Динамический массив в функцию? RainCat Помощь студентам 4 13.04.2011 11:25
Передать двумерный массив через сокет (Debian) Phaeleh Qt и кроссплатформенное программирование С/С++ 1 29.11.2010 07:08
Как передать параметру записи, что в нем параметр это статический массив с данными? SkAndrew Общие вопросы Delphi 6 26.06.2009 02:02