Форум программистов, компьютерный форум CyberForum.ru

Сравнение двумерных матриц - разобрать код - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить загруженность ядер процессора http://www.cyberforum.ru/cpp-beginners/thread1244562.html
Помогите определить загруженность ядер процессора (может как-нибудь получить эти данные из системы).
C++ Стабильный код и xor Доброго времени! Есть такой код:double azim = degrees( atan( s/c )); Проблема в том что c может быть нулём, поэтому вышележащий код быстро превратился в: const double eps = 1e-10; double azim; if( fabs(c) < eps ) { if(( s < 0.0 )^^( c < 0.0 )) http://www.cyberforum.ru/cpp-beginners/thread1244551.html
C++ Нужен справочник по заголовкам и их функциям
Всем привет. Недавно решил научиться программировать на с++ , ранее писал небольшие плагины для игр на pawn. Вроде бы разобрался с синтаксисом и основными моментами, но как написать реальную программу(например, лаунчер) без понятия. У заголовков, как и у функций, названия такие, будто по клаве ударили. Описание на мсдн такое, что поймет только Страуструп. Есть ли какой-то справочник по заголовкам...
C++ Путаница с sftream и операторами << и >>
Значит так, иду спокойно по книжке по темам "Открытие и закрытие текстовых файлов", а также "Чтение и запись текстовых файлов" и тут я немного запутался. Для того чтобы считать информацию из файла, мы используем ifstream, но я ведь привык, что оператор >> используется для ввода информации. То же самое и с помещением информации через объект класса ostream, и опять же я привык, что <<...
C++ Работа с классами и пересечение их между собой (задача о городах и поездах) http://www.cyberforum.ru/cpp-beginners/thread1244503.html
Здравствуйте. Тут попалась в руки задачка, вкратце суть: Есть города, в каждом городе есть станция, на станции пассажиры, у пасажира есть цель поездки(N - ый город). Между городами ездят поезда, в поезде N вагонов, в вагоне N мест. Написать грубо говоря всю эту систему (без графики), поезд прибыл-погрузился-отбыл, ну и естественно не телепортировался, а где-то там медленно двигается по...
C++ Чем отличаются по функционалу Kbhit() и _kbhit() Всем привет. Утолите нубское любопытство. Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит. Все просто и понятно. Про kbhit() пишут только, что устарел еще во времена vs2005. И все. А функционально чем они отличаются? подробнее

Показать сообщение отдельно
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
20.08.2014, 11:00     Сравнение двумерных матриц - разобрать код
Оффтоп

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Определение (иногда вместо термина "определение" используют термин "реализация") функции
Если ударяться в казуистику, то обычно, в разговорной речи, под "реализацией"
понимают только потроха, то есть голое тело функции. Говоря "Где реализация?", подразумевают, что "Ну да, вот я вижу интерфейсы, но где реализация-то? Где все остальное?". А "определение" функции это прям как в книжке: начиная с типа возвращаемого параметра и прям до конца тела.

Цитата Сообщение от gru74ik Посмотреть сообщение
Функция free() возвращает память
Уже прям сразу передергивает постановка.
Лучше б было:
Функция free() как входной параметр принимает указатель matrix[i], записанный в
// нотации массивов - то есть, синтаксис как у массивов, а на самом деле это
// указатель на первый элемент массива) и освобождает по этому указателю память, возвращая ее назад в кучу (heap).
Цитата Сообщение от gru74ik Посмотреть сообщение
Функция malloc() возвращает указатель на первый байт области памяти размером
size, которая была выделена из динамически распределяемой области памяти.
Для определения размера используется sizeof - унарный оператор, возвращающий
длину в байтах переменной или типа, помещенных в скобки (результат приводится
к типу указатель на указатель на int). Как написал выше Algoritmer,
двумерный массив - это одномерный массив одномерных массивов. Если
рассматривать двумерный массив как таблицу, то можно представить, что сначала
мы создаем массив строк (рядов) - у нас количество строк это значение переменной
int n, а потом создаем в цикле массив ячеек (колонок) - за количество колонок
у нас отвечает переменная int m:
C++
1
int**variable = (int**)malloc(sizeof(int*)*n);
Я вот почитал и ничего не понял.
variable это указатель на указатель. То есть, по аналогии с одномерным динамическим массивом, это указатель на массив указателей - тип, содержащихся в нем элементов это указатели. Еще раз: указатель на массив, каждый элемент которого есть указатель. Все. Никакой магии.
Когда мы пишем malloc, или в плюсовом варианте new, то мы говорим компилятору: "выдели нам непрерывный кусок памяти вот такого размера". Как он выделяет, где находит - нас не волнует. Главное, что непрерывный кусок памяти это и есть массив. Он выделяет и говорит: "на, пользуйся". С этих пор никто другой не может в выданную нам память залезть, только мы сами.
Мы имеем непрерывный кусок памяти, требуемого нам размера в одном направлении двумерного массива. Теперь надо выделить себе вторую размерность двумерного массива. Для этого мы должны в каждый элемент того одномерного массива повтыкать по одному новому одномерному массиву. Как палки в забор. Для этого мы проходимся циклом по каждому элементу созданного массива и объявляем, что этот каждый элемент это новый массив:
C++
1
2
    for (int i=0; i<n; i++)
        variable[i]=(int*)malloc(sizeof(int)*m);
Здесь мы компилятору говорим, чтобы он нам выделил памяти сколько нам требуется (то есть m раз по sizeof(int) байт) и начало этой области памяти зафиксировал в текущем элементе массива.
В итоге мы имеем кучу одномерных массивов, но только с тем отличием, что их началы располагаются подряд в памяти. А куда там ведут хвосты нам без разницы.

Поскольку я люблю рисовать картинки, то вот:
Сравнение двумерных матриц - разобрать код
Здесь, правда, целевой тип массива не int, а char - это для того, чтобы наглядно видно было разницу в размерах char и указателя на char.


gru74ik, а так круто, вам бы методички писать. ))

 
Текущее время: 03:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru