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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2014, 19:28   #11
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
В С++ нет понятия двумерного массива, соответственно нет никакого специального для них механизма.
Вы ошибаетесь.
Есть не только многомерные массивы, но и стандартные средства для анализа расширений типа времени компиляции.

Например:

http://www.cplusplus.com/reference/type_traits/rank/
http://www.cplusplus.com/reference/type_traits/extent/
_Bers вне форума Ответить с цитированием
Старый 01.09.2014, 19:29   #12
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
На языке с++ не существует динамических массивов.
Ну так то да, но есть вектор. Интерфейс заданная стандартом сложность операций вектора подходит под определение, разве нет?
rrrFer вне форума Ответить с цитированием
Старый 01.09.2014, 19:36   #13
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Ну так то да, но есть вектор. Интерфейс заданная стандартом сложность операций вектора подходит под определение, разве нет?
на языке с++ не существует ни динамических массивов, ни определения динамического массива.

Вектор - это контейнер.
Такой же полноценный класс, как например, лист, или сет.

Мы можете завелосипедить свой собственный контейнер.

И тогда у вас будет на один контейнер больше, но по прежнему ни одного динамического массива.
_Bers вне форума Ответить с цитированием
Старый 01.09.2014, 19:40   #14
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Есть не только многомерные массивы, но и стандартные средства для анализа расширений типа времени компиляции.
Под многомерными массивами имеется ввиду, что при записи типа a[5] добавляется метаинформация о количестве элементов?
Я так понимаю, что с точки зрения rank<> T** - это не массив вообще. Либо он вернет ноль, либо вообще выкинет предупреждение о неверном типе (не знаю что именно).
rrrFer вне форума Ответить с цитированием
Старый 01.09.2014, 19:45   #15
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
на языке с++ не существует ни динамических массивов, ни определения динамического массива.
Определение динамического массива существует (и существовало задолго до...) независимо от вашего любимого стандарта. Вектор предоставляет чуть более расширенный интерфейс, чем требуется от массива по определению (интерфейс контейнера в том числе). ИМХО тут не интерфейс и что-то еще должно должно определять, а оценка трудоемкости операций.
rrrFer вне форума Ответить с цитированием
Старый 01.09.2014, 19:54   #16
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Под многомерными массивами имеется ввиду, что при записи типа a[5] добавляется метаинформация о количестве элементов?
Под многомерным массивом имеется ввиду многомерный массив.

Массивы не содержат никакой метаинформации.

Однако, поскольку их размерность известна времени компиляции, то на на языке с++ эту информацию можно извлекать с помощью шаблонов.
(см пост #9)

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Я так понимаю, что с точки зрения rank<> T**
Мне не понятна эта запись.

Последний раз редактировалось _Bers; 01.09.2014 в 20:05.
_Bers вне форума Ответить с цитированием
Старый 01.09.2014, 19:59   #17
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Определение динамического массива существует (и существовало задолго до...) независимо от вашего любимого стандарта. Вектор предоставляет чуть более расширенный интерфейс, чем требуется от массива по определению (интерфейс контейнера в том числе). ИМХО тут не интерфейс и что-то еще должно должно определять, а оценка трудоемкости операций.
На языке с++ не существует динамических массивов.
В стандарте языка с++ отсутствует определения динамического массива.

Вы не сможете продекларировать определение динамического массива с++ потому что его не существует.
Следовательно, то о чем вы сейчас сообщаете - чушь.

Последний раз редактировалось _Bers; 01.09.2014 в 20:04.
_Bers вне форума Ответить с цитированием
Старый 02.09.2014, 04:28   #18
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
На языке с++ не существует динамических массивов.
В стандарте языка с++ отсутствует определения динамического массива.

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

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

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

Поэтому динамический массив не определяется через вектор, а вектор определяется через динамический массив.

Я там выше писал, что мир стандартом не заканчивается. Куча определений существует вне него и существовала до него.

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

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Да ваша позиция понятна еще с предыдущей страницы.
Посмотри определение динамического массива (из любой литературы) и описание вектора (из стандарта).
Отлично.

Приводите точный текст формулировок. Если конечно сможете.

Это я к тому, что:

1. Определение из любой литературы - сразу в топку.
Требуется формальное определение динамического массива, пусть и без привязки к конкретному ЯП, но все таки относящееся к типу языка программирования.
(хотя и не очевидно, зачем нужно оперировать определением одного языка программирования, когда речь совсем о другом).

2. В стандарте плюсов нет ни слова ни о динамических контейнерах, ни о векторе.

3. Единственное ближайшее подобие у вас получится только для языка си:
variable-length array

array data structure of automatic storage duration whose length is determined at run time (instead of at compile time).

The following C99 function allocates a variable-length array of a specified size, fills it with floating-point values, then passes it to another function for processing. Because the array is declared as an automatic variable, its lifetime ends when the read_and_process function returns.

Код:
float read_and_process(int n)
{
    float vals[n];  //<--- обратите внимание, что n известна только в рантайме
 
    for (int i = 0; i < n; i++)
        vals[i] = read_val();
    return process(vals, n);
}

И разница не просто в словах.

Формальное определение стандарта - это больше, чем просто слова.

В данном случае речь идет об определении типа.

Части синтаксиса. Части речи, если хотите.
Частица, которую понимает компилятор.

В случае языка Си, компилятор будет определять имя vals как массив переменной длины.
Компилятор языка с++ ничего подобного в принципе не умеет.

Взгляните сюда:

Код:
int n=10;
some* ptr = new some[n];
Скажите, что вы видите.

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

Цитата:
Сообщение от rrrFer Посмотреть сообщение
Я там выше писал, что мир стандартом не заканчивается. Куча определений существует вне него и существовала до него.
Мне однажды сделали замечание за то, что я употребил словосочетание "метод класса".

Мне сказали: такого термина на плюсах не существует.

"Но ведь это всего лишь слэнг!" - возвразил я - мы ж тут не официальный документ стандарта пишем. Вроде понятно о чем речь?


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

Однако, вот лично я никогда бы не подумал, что под "динамическим массивом" кто то будет подразумевать std::vector.

Более того, боюсь что вот этот человек вас так же не правильно поймет:

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
У каждого свой стиль. Я статическими массивами не пользуюсь, а динамические в функцию передаются по указателям.
Вот вы два товарища, вы мне скажите: то ли один из вас имел ввиду вектор, а другой - указатель на кусок в куче.

То ли один из вас передает вектора по указателям?

На моей практике обычно "динамическими массивами" обзывали именно указатели, которые хранили адрес кучи.

И передавали в функцию указатель и длину. А вовсе не вектор. Который все нормальные люди передают по ссылке.


Резюмируя:

Вместо того, что бы называть "вектор" "вектором" вы начали какую то байду разводить, которая только запутывает.

А нас ведь и другие люди тоже читают. Некоторые новички. Не нужно прививать им дурных наклонностей.

Последний раз редактировалось _Bers; 02.09.2014 в 18:56.
_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