Как часто вам приходится сталкиваться с конструкцией sizeof(array)/sizeof(array[0]) для определения размера массива? Очень надеюсь, что не часто, ведь на дворе уже 2024 год. В заметке поговорим о недостатках конструкции, откуда она берётся в современном коде и как от неё наконец избавиться.
Рубрика «массив»
Как не надо проверять размер массива в С++
2024-04-05 в 11:14, admin, рубрики: c++, c++17, open source, openttd, pvs-studio, sizeof, массив, размер массиваРаспознаем фигуры по массиву точек: эллипсы и не выпуклые фигуры
2022-01-06 в 19:09, admin, рубрики: java, алгоритм, Алгоритмы, круг, массив, многоугольник, ненормальное программирование, распознавание, Точка, фигуры, эллипсДанная статья является продолжением предыдущей статьи о распознавании простых многоугольников по нарисованной линии. В данной части будут рассмотрены алгоритмы распознавания эллипсов и алгоритм распознавания невыпуклых многоугольников.
Оглавление
Теория графов. Часть третья (Представление графа с помощью матриц смежности, инцидентности и списков смежности)
2021-07-31 в 18:12, admin, рубрики: Алгоритмы, веса, граф, графики, графы, искусственный интеллект, массив, математика, матрица, машинное обучение, петли, ребра графа, Сетевые технологии, списки, теория графовВсе, что познается, имеет число, ибо невозможно ни понять ничего, ни познать без него – Пифагор
В этой статье:
Матрица смежности
Матрица инцидентности
Список смежности (инцидентности)
Взвешенный граф (коротко)
Итак, мы умеем задавать граф графическим способом. Но есть еще два способа как можно задавать граф, а точнее представлять его. Для экономии памяти в компьютере граф можно представлять с помощью матриц или с помощью списков.
Матрица является удобной для представления плотных графов в которых количество ребер (E) примерно равно количеству вершин (V).
Основные структуры данных. Матчасть. Азы
2018-09-04 в 10:45, admin, рубрики: Алгоритмы, дерево, массив, Матчасть, очередь, перевод, Программирование, стек, типы данных, хешВсе чаще замечаю, что современным самоучкам очень не хватает матчасти. Все знают языки, но мало основы, такие как типы данных или алгоритмы. Немного про типы данных.
Еще в далеком 1976 швейцарский ученый Никлаус Вирт написал книгу Алгоритмы + структуры данных = программы.
40+ лет спустя это уравнение все еще верно. И если вы самоучка и надолго в программировании пробегитесь по статье, можно по диагонали. Можно код кофе.
Проектируем СХД для видеонаблюдения
2017-07-05 в 10:03, admin, рубрики: cctv, raid, Блог компании RAIDIX, видеонаблюдение, диск, камера, массив, Серверное администрирование, системное администрирование, СХД, хранение данных
В предыдущей статье мы говорили об особенностях организации ИТ-инфраструктуры и подсистемы хранения данных для видеонаблюдения и пришли к выводу, что в крупных проектах для организации хранилища видеоархива целесообразно использовать СХД (системы хранения данных).
В данной публикации обсудим проблему выбора СХД для видеонаблюдения, преимущества хранилищ на базе RAIDIX и примеры их реальных внедрений.
Читать полностью »
Аналог std::vector из C++11 на чистом C89 и как я его писал
2017-03-17 в 11:36, admin, рубрики: C, вектор, Занимательные задачки, макросы, массив, меня отчислят, ненормальное программирование, обобщённое программирование, пиши компилятор, пиши курсовую, Си, типы данных, шаблоны, метки: си
Жилой массив людей. Нет, серьёзно.
Холивары между ценителями Си и приверженцами его "сына" в лице C++ начались ещё до моего рождения и прекратятся разве что после смерти обоих этих языков и меня заодно. Адепты великого творения Кернигана-Ритчи до последней секунды рабочего дня готовы доказывать аксиомы приспешникам Страуструпа про вечность Си и его невероятную гибкость. Те в ответ им по-свойски советуют лучше порадоваться рабочему дню, ведь он вот-вот окажется последним – двадцать первому веку кроссплатформенный ассемблер не нужен. Распаляясь, сторонники Си приводят давно прошедшие через голову навылет миллионы тезисов "почему Си лучше C++", при этом каждый раз подчёркивая, что второй все достоинства первого растерял ещё будучи в отцовской утробе, попутно утратив лик человеческий. Обвиняемая сторона в обиде не остаётся и… а хотя постойте, о чём это я.
Я люблю Си, уважаю C++ и не переношу холивары (честно). При этом я осознаю, что в Си действительно не хватает многого, и яркий тому пример – отсутствие удобной работы с данными. В C++ эту проблему во многом решает STL и свойства самого языка. На мой студенческий взгляд, здесь особо отличается всем знакомый std::vector
. Если стало интересно, как я реализовал его аналог средствами C89 – прошу под кат.
Указатели, ссылки и массивы в C и C++: точки над i
2015-02-19 в 20:12, admin, рубрики: C, c++, массив, ссылка, указательВ этом посте я постараюсь окончательно разобрать такие тонкие понятия в C и C++, как указатели, ссылки и массивы. В частности, я отвечу на вопрос, так являются массивы C указателями или нет.
Обозначения и предположения
- Я буду предполагать, что читатель понимает, что, например, в C++ есть ссылки, а в C — нет, поэтому я не буду постоянно напоминать, о каком именно языке (C/C++ или именно C++) я сейчас говорю, читатель поймёт это из контекста;
- Также, я предполагаю, что читатель уже знает C и C++ на базовом уровне и знает, к примеру, синтаксис объявления ссылки. В этом посте я буду заниматься именно дотошным разбором мелочей;
- Буду обозначать типы так, как выглядело бы объявление переменной TYPE соответствующего типа. Например, тип «массив длины 2 int'ов» я буду обозначать как
int TYPE[2]
; - Я буду предполагать, что мы в основном имеем дело с обычными типами данных, такими как
int TYPE
,int *TYPE
и т. д., для которых операции =, &, * и другие не переопределены и обозначают обычные вещи; - «Объект» всегда будет означать «всё, что не ссылка», а не «экземпляр класса»;
- Везде, за исключением специально оговоренных случаев, подразумеваются C89 и C++98.
Указатели и ссылки
Указатели. Что такое указатели, я рассказывать не буду. :) Будем считать, что вы это знаете. Напомню лишь следующие вещи (все примеры кода предполагаются находящимися внутри какой-нибудь функции, например, main):
int x;
int *y = &x; // От любой переменной можно взять адрес при помощи операции взятия адреса "&". Эта операция возвращает указатель
int z = *y; // Указатель можно разыменовать при помощи операции разыменовывания "*". Это операция возвращает тот объект, на который указывает указатель
Arr.js: события для стандартного массива
2014-09-26 в 7:20, admin, рубрики: array, collection, javascript, данные, массив Arr.js — это «класс», унаследованный от стандартного Array
. Отличительными особенностями являются: наличие события change
для отслеживания любых изменений в массиве, и методы insert()
, update()
, remove()
, set()
, get()
для упрощенной работы с массивом. Доступны все «родные» методы стандартного Array
.
var fruits = new Arr('apple', 'orange', 'pineapple');
fruits.on('change', function(event) {
alert('I changed fruits: ' + fruits.join(', '));
});
fruits.push('banana');
Разрежённый массив представленный деревом
2013-08-21 в 12:12, admin, рубрики: Алгоритмы, деревья, массив, Программирование, структура данных, метки: деревья, массив, структура данныхЗдравствуйте.
Меня зовут Александр Рулёв и я хочу рассказать вам о структуре данных, на которую я совершенно случайно наткнулся (на самом деле около трёх дней перебирал возможные комбинации, пока не получил что-то однозначное).
У меня просто была проблема, которая оказалась не проблемой в реальном мире, но кажется я решил её в мире абстрактном.
Проблема была следующая: есть список элементов определённой длины. Мы должны быстро получать элемент по индексу, а так же иметь возможность вставить/удалить с любой позиции элемент. Причём чтобы остальные «пододвинулись», либо схлопнулись. Очевидно, что ни линейный список, ни массив не подходят. А обычное дерево не имеет возможности получить элемент по индексу без обхода дерева, которое тоже O(N) и лучше мы бы использовали список.
И кажется я решил эту проблему. И в данный момент это что-то похожее на эйфорию, поскольку находится всё больше и больше вариантов применения придуманной структуры данных, а фундаментальных проблем всё ещё не видно.
Асимптоматика свойственная дереву: O(log N) на все операции. Вставка/удаление в наивной реализации O((log N)^2), но мне кажется, что это можно оптимизировать.
В этой статье (первой, надеюсь не последней) я опишу, что представляет из себя это дерево, а так же как совершать над ним операции. Если всё работает так, как мне кажется и вы не найдёте никаких проблем, которые нельзя починить — мир получает прекрасную (как мне кажется) структуру данных. Иначе мне будет стыдно.
Читать полностью »
Класс dummyArray: как подружить код работающий с массивами и код работающий со свойствами объекта
2012-09-22 в 22:29, admin, рубрики: array, class, php, wrapper, велосипед, массив, метки: array, class, PHP, wrapper, велосипед, массив Возникла задача код работающий с набором данных как с массивом с кодом, который воспринимает этот же набор данных как класс.
Решение — создать класс с которым можно будет работать как с массивом (ArrayAccess), который будет также легко обходиться в foreach (Iterator) и у которого будут свойства с именами ключей. До кучи также был реализован интерфейс Countable.
Пример:
$user = new dummyArray;
// Добавим пару элементов в формате массива
$user['name'] = 'myname';
$user['sex'] = 'man';
// Добавим следующие пару записей в виде свойств объекта
$user->age = 18;
$user->occupation = 'director';