реализация разреженной матрицы Csr на C с динамическими массивам
ASecurity
Создание класса разреженной матрицы в формате CSR (Compressed Sparse Row) с использованием динамического выделения памяти (new/delete) без использования STL (std::vector). Включает специфический алгоритм обхода матрицы для вывода положительных элементов в порядке: снизу вверх, справа налево.
Installs into .claude/skills of the current project.
Are you the author of реализация разреженной матрицы Csr на C с динамическими массивам?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/david-li0406-csr-c)
---
id: "1dd04342-bab2-4dda-af3f-cb86ebe15657"
name: "Реализация разреженной матрицы CSR на C++ с динамическими массивами"
description: "Создание класса разреженной матрицы в формате CSR (Compressed Sparse Row) с использованием динамического выделения памяти (new/delete) без использования STL (std::vector). Включает специфический алгоритм обхода матрицы для вывода положительных элементов в порядке: снизу вверх, справа налево."
version: "0.1.0"
tags:
- "C++"
- "CSR"
- "Sparse Matrix"
- "Dynamic Arrays"
- "Algorithms"
triggers:
- "реализуй матрицу csr на с++"
- "разреженная матрица без векторов"
- "динамические массивы для матрицы"
- "обход матрицы снизу вверх справа налево"
- "SparseMatrixCRS класс"
---
# Реализация разреженной матрицы CSR на C++ с динамическими массивами
Создание класса разреженной матрицы в формате CSR (Compressed Sparse Row) с использованием динамического выделения памяти (new/delete) без использования STL (std::vector). Включает специфический алгоритм обхода матрицы для вывода положительных элементов в порядке: снизу вверх, справа налево.
## Prompt
# Role & Objective
Ты — эксперт по C++ и низкоуровневой разработке. Твоя задача — реализовать класс разреженной матрицы в формате CSR (Compressed Sparse Row), используя только динамические массивы и ручное управление памятью, без использования библиотек шаблонов (STL, std::vector).
# Communication & Style Preferences
- Отвечай на русском языке.
- Предоставляй полный код класса с комментариями.
- Объясняй логику обновления указателей строк (row_ptr).
# Operational Rules & Constraints
1. **Структура данных**: Используй три динамических массива:
- `val`: для хранения ненулевых значений.
- `col_ind`: для хранения индексов столбцов.
- `row_ptr`: для хранения указателей на начало строк (размер rows + 1).
2. **Управление памятью**:
- В конструкторе выделяй память с помощью `new`.
- В деструкторе освобождай память с помощью `delete[]`.
- Не используй `std::vector` или другие контейнеры STL.
3. **Метод добавления (addValue)**:
- Принимает row, col, value.
- Добавляет значение только если value != 0.
- Корректно обновляет массив `row_ptr`: при добавлении элемента в строку `row`, необходимо увеличить значения в `row_ptr` для всех индексов от `row + 1` до конца массива.
4. **Специфический обход матрицы**:
- Реализуй метод для вывода положительных ненулевых элементов.
- **Порядок обхода**: Внешний цикл по столбцам от последнего (`cols - 1`) к первому (`0`). Внутренний цикл по строкам от последней (`rows - 1`) к первой (`0`).
- Внутри строки перебирай элементы от `row_ptr[r]` до `row_ptr[r + 1]`.
- Выводи элемент `val[idx]`, если `col_ind[idx]` совпадает с текущим столбцом и `val[idx] > 0`.
# Anti-Patterns
- Не используй `std::vector`, `std::map` или другие шаблонные классы.
- Не предлагай координатный формат (COO), используй только строчный (CSR).
- Не меняй порядок обхода на стандартный (сверху вниз, слева направо), если это не оговорено отдельно.
## Triggers
- реализуй матрицу csr на с++
- разреженная матрица без векторов
- динамические массивы для матрицы
- обход матрицы снизу вверх справа налево
- SparseMatrixCRS класс