Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Builder Смена картинки при навидении курсора. http://www.cyberforum.ru/cpp-builder/thread534656.html
Вот дана форма на ней натыкано разных CheckBox-ов и загружена в кутку картинка любая. Как реализовать так чтоб при наведении на любой CheckBox картинка менялась? (только при наведении, не выборе, а...
Закрытие консольного приложения C++ Builder
Добрый день! Подскажите, как отследить закрытие консольного приложения? ... к примеру, чтобы корректно освободить память после динамического выделения...
C++ Builder Задана структура со следующими полями:
Имя,Фамилия,год рождения,номер 1. Фильтровать несовершенолетних 2. Сортировать все записи по имени (ребята пропишите пожалуйста в С++)очень надо
C++ Builder Строка с переменной подскажите пожалуйтся а то я очень туплю)))) this->StringGrid1->Cells=Sheet.OlePropertyGet("Range", "A1"); в этой строке "A1"... кароче должно менятся А1,А2, А3.... итд вообщем нужно вместо 1... http://www.cyberforum.ru/cpp-builder/thread534476.html
C++ Builder Транслит через map http://www.cyberforum.ru/cpp-builder/thread534463.html
здраствуйте! нужен был транслит с русского на английский посоветовали через map сделал транслит через (map), оказалось очень удобно!! вот теперь нужно на обород с английского на русский, но...
Проблема компилятора. [ILINK32 Error] Fatal: Unable to open file. C++ Builder
Не пойму в чем проблема, при написании любого рабочего кода и последующей его компиляции следующая ошибка: Fatal: Unable to open file '' Но если, создаю новый проект и не сохраняя его вставляю...
Вычисление простых или сложных процентов C++ Builder
В билдере нужно написать программу «Доход по вкладу», которая вычисляет доходы в зависимости от выбора пользователя – простые или сложные проценты. Простые проценты начисляются в конце срока вклада,...
C++ Builder Пожалуйста проверьте программу !!! вот сделал курсач, нужно чтобы кто-то проверил , правильно ли работает ? если будут ошибки , то исправьте пожалуйста ... http://www.cyberforum.ru/cpp-builder/thread534307.html
C++ Builder Заполнение ListView http://www.cyberforum.ru/cpp-builder/thread534256.html
Подскажите, как заполнять ListView. Я пробую заполнить так: ListView->AddItem("Текст", ListView->Column); Заполняется, но только первая колонна (Column или - без разницы). Как же правильно...
C++ Builder Программно нажать F10 Как программно нажать F10 ? http://www.cyberforum.ru/cpp-builder/thread534250.html
soon
2549 / 1314 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.04.2012, 20:29 0

Разработать способ экономного хранения в памяти разреженных матриц

03.04.2012, 20:29. Просмотров 1708. Ответов 2
Метки (Все метки)

Лучший ответ Сообщение было отмечено Azdeman как решение

Решение

С учетом пожеланий ТС об удалении всех нулей
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <vector>
#include <algorithm>
#include <initializer_list>
#include <cstdlib>
#include <stdexcept>
#include <chrono>
#include <iomanip>
////////////////////////////////////////////////////////////////////////////////
template <class T>
class SparseMatrix
{
    using T_row     = std::vector<T>;
    using T_matrix  = std::vector<T_row>;
    //--------------------------------------------------------------------------
    T_matrix _matrix;
    //--------------------------------------------------------------------------
public:
    SparseMatrix
    (
        std::initializer_list
        <
            std::initializer_list<T>
        >   l
    ):  _matrix(l.begin(), l.end())
    {
        for(auto& row: _matrix)
            row.erase(std::remove(row.begin(), row.end(), 0), row.end());
 
        _matrix.erase
        (
            std::remove(_matrix.begin(), _matrix.end(), T_row()),
            _matrix.end()
        );
    }
    //--------------------------------------------------------------------------
    const std::size_t rows() const
    {
        return _matrix.size();
    }
    //--------------------------------------------------------------------------
    const std::size_t cols(const std::size_t& row) const
    {
        if(row < _matrix.size())
            return _matrix.at(row).size();
        else
            throw std::out_of_range("SparseMatrix::cols");
    }
    //--------------------------------------------------------------------------
    T& at(const std::size_t& row, const std::size_t& col) const
    {
        if(row < _matrix.size())
        {
            if(col < _matrix.at(row).size())
                return _matrix.at(row).at(col);
        }
        else
            throw std::out_of_range("SparseMatrix::at");
    }
    //--------------------------------------------------------------------------
    void insertRow
    (
        const std::size_t& row,
        const std::initializer_list<T>& l = { }
    )
    {
        if(row <= _matrix.size())
        {
            _matrix.emplace(_matrix.begin() + row, l);
            _matrix.at(row).erase
            (
                std::remove
                (
                    _matrix.at(row).begin(),
                    _matrix.at(row).end(),
                    0
                ),
                _matrix.at(row).end()
            );
            if(_matrix.at(row).size() == 0)
                _matrix.erase(_matrix.begin() + row);
        }
        else
            throw std::out_of_range("SparseMatrix::insertRow");
    }
    //--------------------------------------------------------------------------
    friend std::ostream& operator<< (std::ostream& stream, SparseMatrix& m)
    {
        for(const auto& row: m._matrix)
        {
            for(const auto& elem: row)
                stream << std::setw(4) << elem;
            std::cout << std::endl;
        }
        return stream;
    }
};
////////////////////////////////////////////////////////////////////////////////
int main()
{
    const auto start1 = std::chrono::high_resolution_clock::now();
    SparseMatrix<int> matrix({ { 1, 0, 3 }, { 0, 0, 6 }, { 0, 0, 0 } });
    const auto finish1 = std::chrono::high_resolution_clock::now();
    std::cout   <<  "time for creating matrix = "
                <<  std::chrono::duration_cast
                <
                    std::chrono::milliseconds
                >(finish1 - start1).count() << std::endl;
    std::cout << matrix << std::endl;
    matrix.insertRow(2, { 1, 2, 3, 4, 5, 0, 7 });
    std::cout << matrix << std::endl;
    return 0;
}
Хроно запихнул как пример
Для компиляции нужна поддержка C++11.
http://liveworkspace.org/code/16b40dabb5fee87195e5b9acdc53f64c

Вернуться к обсуждению:
Разработать способ экономного хранения в памяти разреженных матриц
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2012, 20:29
Готовые ответы и решения:

Разработать способ экономического хранения в памяти разреженных матриц
задание Разработать способ экономического хранения в памяти разреженных матриц. Разработать...

Разработать способ экономного размещения в памяти заданной разреженной таблицы
Быть может кто-нибудь может сделать задачу? Был бы очень благодарен. Разработать способ экономного...

Разработать способ экономного размещения в памяти заданного разреженного массива
Добрый день! Помогите пожалуйста разобраться почему программа автоматически определяет нулевой...

Умножение треугольных матриц«Методы обработки разреженных матриц»
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ...

Хранения матриц в динамически распределяемой области памяти
Скажите пожалуйста или приведите пример хранения матриц в динамически распределяемой области...

2
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru