Current time: 10.11.2024, 21:52 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
С++, общая тема
Author Message
gamecreator Offline

Posts: 7107
Post: #136

нет, алгоритмически


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
04.04.2012 00:25
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16648
Post: #137

Ты о формальном доказательстве программ и о людях, которые не ошибаются и о надёжных данных внешних? )


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
04.04.2012 00:38
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #138

я о том, что если нормальные значения переменной не могут выходить за тот диапазон, то будь то int или uint - диапазон нормальных значений не изменится.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
04.04.2012 01:07
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #139

Дайте я тоже поучаствую в споре: хотите не обращаться куды попало - юзайте вектор, например. при попытке лезть в отрицательные элементы получите исключение.
04.04.2012 10:03
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #140

gamecreator Wrote:так мне же проще на c# писать, чем на с++
А причём здесь C#? Тема-то про С++, а не про него. До этого ты про него ни слова не говорил, а потом вдруг сказал про сборку мусора Rolleyes

Berserker Wrote:А при проектировании интерфейсов, структур и функций есть. Если использована int, то uint не подходят. Если uint, то любое int-рассчитанное значение не подходит.
Дык проектировать всё надо в едином стиле, тогда и проблем не будет.

NIKr0m@nceR Wrote:Дайте я тоже поучаствую в споре: хотите не обращаться куды попало - юзайте вектор, например. при попытке лезть в отрицательные элементы получите исключение.
Угу, я об этом говорил на 4-й странице темы. Ещё бы хотел добавить, что стоит использовать модификатор const так часто, как это возможно (особенно для классовых функций).


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
04.04.2012 12:47
Find all posts by this user Quote this message in a reply
packa Offline

Posts: 1210
Post: #141

Научился передавать двумерный массив в функцию и работать далее как с одномерным:
Вопрос: внутри функции можно ли работать как-нибудь в более привычном виде?

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

Слышал про массив указателей, вроде как должно писаться вместо (int *a) вот это:(int **a) Но я не понял как передать ему двумерный массив &kakoy_to_massiv[0][0] - так указывается только на начало массива, без одного 0 передается int *[5]
Блин, чувствую что я очень близко, но вот не могу дотянуть)


подпись была удалена администрацией
просьба не использовать картинки с сайта heroeslibrary.net, так как на них ругается Chrome
(This post was last modified: 04.04.2012 18:19 by packa.)
04.04.2012 18:18
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #142

(04.04.2012 18:18)packa Wrote:  Научился передавать двумерный массив в функцию и работать далее как с одномерным
неправильно ты массив передаешь. нужно просто название переменной записать
(04.04.2012 18:18)packa Wrote:  Вопрос: внутри функции можно ли работать как-нибудь в более привычном виде?
я уже писал об этом:
(01.04.2012 19:23)gamecreator Wrote:  если одномерный массив можно передать как написав int *array, так и int array[], то n-мерный статический массив нельзя передать, не указав размеры n-1 его измерений
т.е. тебе придется записать параметр как int a[][5] или int a[5][5]
(04.04.2012 18:18)packa Wrote:  Слышал про массив указателей, вроде как должно писаться вместо (int *a) вот это:(int **a)
это для динамических массивов, тебе оно не поможет.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
04.04.2012 19:21
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #143

packa Wrote:Вопрос: внутри функции можно ли работать как-нибудь в более привычном виде?
Если не использовать шаблоны функций, а также хаки типа reinterpret_cast - то для статического массива никак нельзя, увы.

gamecreator Wrote:т.е. тебе придется записать параметр как int a[][5] или int a[5][5]
Ничего подобного! Игродел, не вводи человека в заблуждение.
Например, этот код прекрасно сработает как для двумерных статических, так и для динамических массивов: (Click to View)
   
А вообще, создавать подобным образом "динамические массивы" - это не есть гут. Потому что это массив указателей, а не "двумерный массив". У двумерного массива все его "строки" будут иметь одинаковую длину, а в случае с массивом указателей - это условие не обязательно будет верно...

Функция, изначально заточенная под статические массивы, всегда будет работать и с динамическим массивом тоже (если в ней не указывать размер массива явно). А вот обратное будет неверно, поэтому лучше всегда работать со стеком. Для "нормальных" динамических массивов в C++ уже давно придуман std::vector, и изобретать велосипед тут незачем. Именно вектор я тебе, Пакка, и рекомендую использовать.


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
04.04.2012 19:54
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #144

(04.04.2012 19:54)Efrit Wrote:      Add_10_to_all_values_of_array(*dynamic_array, 4, 7); // добавляем 10 ко всем элементам динамического массива
не вводи человека в заблуждение. этим вызовом ты прибавишь 10 к первой строке массива и неизвестно чему, находящемуся в памяти после этой строки.
(04.04.2012 19:54)Efrit Wrote:  А вообще, создавать подобным образом "динамические массивы" - это не есть гут. Потому что это массив указателей, а не "двумерный массив". У двумерного массива все его "строки" будут иметь одинаковую длину, а в случае с массивом указателей - это условие не обязательно будет верно...
как создашь - так и будет. зубчатые массивы никто не заставляет создавать.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
04.04.2012 21:15
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #145

gamecreator Wrote:не вводи человека в заблуждение. этим вызовом ты прибавишь 10 к первой строке массива и неизвестно чему, находящемуся в памяти после этой строки.
Ничего подобного. Ты бы хоть код скомпилировал для начала, прежде чем утверждать.
Если длина всех строк одинакова, то приведённый мною код всегда будет работать корректно.

gamecreator Wrote:как создашь - так и будет. зубчатые массивы никто не заставляет создавать.
Двумерный массив по определению обязан быть зубчатым. Если строки двумерного массива имеют разную длину - то это набор каких-то различных одномерных массивов, а не "матрица". Пакке нужна именно матрица, и для неё мой код вполне подходит.


Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
04.04.2012 21:48
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #146

(04.04.2012 21:48)Efrit Wrote:  Ничего подобного. Ты бы хоть код скомпилировал для начала, прежде чем утверждать.
Если длина всех строк одинакова, то приведённый мною код всегда будет работать корректно.
я верю, что в большинстве случаев он будет работать корректно. на что ты рассчитывал писав свою функцию:
- тот, кто будет его вызывать, создаст строки матрицы строго в порядке от 0 до n-1
- менеджер памяти выделит каждый блок строго за предыдущим, без разрывов
(04.04.2012 21:48)Efrit Wrote:  Если строки двумерного массива имеют разную длину - то это набор каких-то различных одномерных массивов, а не "матрица".
а если у них одинаковая длина? согласен, что это матрица?


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
05.04.2012 01:20
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #147

Ну вообще, имхо, спор бессмысленный ибо странно говорить что является труЪ двумерным массивом если одно является одномерным массивом наделенным необходимым функционалом а второе фактически массивом массивов т.е. более общим объектом.
бтв, Efrit, а мне больше нравятся квадратные скобочки ибо читабельнее.
gamecreator, что значит "в большинстве случаев"? многомерные массивы именно так и создаются, я и говорю, что по факту это одномерный массив с необходимым функционалом.
05.04.2012 11:47
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #148

NIKr0m@nceR, сначала посмотри о чем речь и как создается динамический массив в примере. одномерный массив не равно массив массивов


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
05.04.2012 12:56
Find all posts by this user Quote this message in a reply
NIKr0m@nceR Offline

Posts: 203
Post: #149

gamecreator, я посмотрел перед тем как писать, я и не говорю что равно. я говорю что называть какой-то из них двумерным массивом а другой нет ибо это нечто иное не вполне верно. Двумерный массив как контейнер для, к примеру, интов может быть реализован, как я понимаю, двумя способами: создать одномерный массив m*n и прикрутить интерфейс или создать массив указателей на массивы. когда пишется int example_array[2][4] то фактически компиллятор выделяет массив на 8 интов и позволяет к ним обращаться как example_array[i][j] что, вообще говоря, является переобозначением для удобства конструкции *(example_array + 4 * i + j). Насчет динамического - проглядел, там действительно что попало функция сделает. я вообще не понимаю, это две разные конструкции, зачем х в одну кучу валить неясно.

P.S. я не вдавался в подробности, но по стандарту 11 запилили контейнер array вроде. У него функционал какой? Его использовать разумнее чем вектор или нет?
(This post was last modified: 05.04.2012 13:32 by NIKr0m@nceR.)
05.04.2012 13:23
Find all posts by this user Quote this message in a reply
gamecreator Offline

Posts: 7107
Post: #150

судя по всему, std::array - аналог статического массива.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
05.04.2012 14:29
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group