0 / 0 / 0
Регистрация: 21.04.2018
Сообщений: 30
1

Класс, сохраняющий данные любого типа/Разрежённый массив(реализция)

22.05.2018, 22:27. Показов 1049. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1)Не могу описать класс, которые сохраняет любые данные. Нужно пользоваться темплейтом, не получаеться. Кто может подкиньте любой элементарный код или литературу об этом, потому что все что в интернете нашел не помогло, не могу понять какими должны быть функции данного класса.
2) В этом же классе должен быть разрежённый массив. Аналогично, кто может подкинуть код реализации подобных массивов + литературу?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2018, 22:27
Ответы с готовыми решениями:

Реализовать класс MyQueue, позволяющий хранить данные любого типа в виде очереди
Здравствуйте уважаемые форумчане, помогите с задачей на шаблоны 1. Реализовать класс MyQueue,...

как написать программу, к примеру, класс шаблон выводящая дин. массив любого типа, с конструктором и деструктором...
Доброго всем времени суток! Очень заинтересовался этим языком, но не все получается. Вот как...

Написать шаблонную функцию, которая принимает одномерный массив любого типа, значение такого же типа, и размер массива,
Решил задачу, но у меня выскакивает ошибка. Вот сама задача: Написать шаблонную функцию, которая...

Записать в память и хранить в ней данные любого типа
Добрый день. Разбираюсь с типами данных в С++. В частности каким образом осуществляется...

6
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
22.05.2018, 22:59 2
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
#include "iostream"
#include "string"
 
using namespace std;
 
template <typename T>
class Example
{
private:
    T _value;
public:
    Example<T>() = default;
    Example<T>(T value) : _value(value) {}
    void SetValue(T value) { _value = value; }
    T GetValue() { return _value; }
    ~Example<T>() {}
};
 
int main()
{
    Example<string> x;
    x.SetValue("Hello, man");
    cout << x.GetValue() << endl;
 
    Example<int> y;
    y.SetValue(123);
    cout << y.GetValue() << endl;
 
    Example<double> z(32.54);
    cout << z.GetValue() << endl;
    z.SetValue(123.321);
    cout << z.GetValue() << endl;
 
    return 0;
}
2
0 / 0 / 0
Регистрация: 21.04.2018
Сообщений: 30
22.05.2018, 23:33  [ТС] 3
спасибо, а по разрежённым массивам где информацию понятную можно найти?
0
474 / 426 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
22.05.2018, 23:40 4
Devestagion, Ну, например тут: http://c-spravochnik.ru/23/23.php
1
0 / 0 / 0
Регистрация: 21.04.2018
Сообщений: 30
23.05.2018, 00:08  [ТС] 5
спасибо, и последний вопрос, как написать родовой конструктор копирования и присвоения правильно без перегрузки оператора?
0
134 / 104 / 60
Регистрация: 26.10.2013
Сообщений: 312
23.05.2018, 00:16 6
Простая реализация разреженной матрицы.
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
#include <iostream>
#include <vector>
#include <unordered_map>
 
template <typename T>
class SimpleSparseMatrix
{
public:
    SimpleSparseMatrix(size_t rows, size_t cols, T def_value = T())
        : rows_(rows)
        , cols_(cols)
        , default_value_(def_value)
    { }
 
    T & operator()(size_t row_idx, size_t col_idx)
    {
        size_t user_idx = row_idx * cols_ + col_idx;
        auto it = data_.find(user_idx);
        if (it != data_.end())
            return it->second;
        data_.emplace(user_idx, default_value_);
        return data_[user_idx];
    }
 
    const T& operator()(size_t row_idx, size_t col_idx) const
    {
        size_t user_idx = row_idx * cols_ + col_idx;
        auto it = data_.find(user_idx);
        if (it != data_.end())
            return it->second;
        return default_value_;
    }
 
    size_t rows() const
    {
        return rows_;
    }
 
    size_t cols() const
    {
        return cols_;
    }
 
private:
    size_t rows_;
    size_t cols_;
    T default_value_;
    std::unordered_map<std::size_t, T> data_;
};
 
int main()
{
    SimpleSparseMatrix<int> m(3, 5);
    for (size_t i = 0; i < m.rows(); ++i)
    {
        for (size_t j = 0; j < m.cols(); ++j)
            std::cout << m(i, j) << "  ";
        std::endl(std::cout);
    }
    std::endl(std::cout);
 
    m(2, 4) = 6;
    m(1, 0) = 3;
    m(2, 2) = 13;
 
    for (size_t i = 0; i < m.rows(); ++i)
    {
        for (size_t j = 0; j < m.cols(); ++j)
            std::cout << m(i, j) << "  ";
        std::endl(std::cout);
    }
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 21.04.2018
Сообщений: 30
23.05.2018, 01:17  [ТС] 7
Вот, написал почти все, не могу напсиать правильно конструктор копирования. Можете помочь с ним?
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
#include <iostream>
#include <list>
#include <windows.h>
using namespace std;
 
template <class T> class List
{
    list <T> spisok;
public:
    T &operator[](int n)
    {
        typename list <T>::iterator a = spisok.begin();
        advance(a,n);
        return *a;
    }
    T operator=(T b)
    {
        spisok.push_back(b);
    }
    int gets()
    {
        return spisok.size();
    }
};
void show(List <double> dob)
{
   if(dob.gets() > 0)
   {
       cout << "List of doubles includes:\n";
       for(int i = 0; i < dob.gets(); i++)
        cout << dob[i] << " ";
       cout << endl;
   }
   else cout << "List of doubles is empty \n";
}
void show(List <char> cob)
{
    if(cob.gets() > 0)
        {
            cout << "List of chars includes:\n";
            for(int i = 0; i < cob.gets(); i++)
                cout << cob[i] << " ";
                cout << endl;
        }
        else cout << "List of chars is empty\n";
 
}
main()
{
    List <double> dob;
    List <char> cob;
    int ch = 0;
    double a;
    char b;
    cout << "Menu: \n1. Add doubles \n2. Add chars \n3. Show all \n4. Exit\n";
    while(ch != 4)
    {
 
        cin >> ch;
        if(ch == 1)
        {
            cin >> a;
            dob = a;
        }
        if(ch == 2)
        {
            cin >> b;
            cob = b;
        }
        if(ch == 3)
        {
            show(dob);
            show(cob);
        }
    }
}
0
23.05.2018, 01:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2018, 01:17
Помогаю со студенческими работами здесь

Создать класс-шаблон, позволяющий хранить коллекцию элементов любого типа
помогите разобраться с этим заданием Создать класс-шаблон, позволяющий хранить коллекцию...

Создать класс "Список объектов любого типа"
Создайте класс, который способен запоминать список объектов не заданного типа класса (для любого...

Создать класс "Список объектов любого типа"
Создайте класс, который способен запоминать список объектов не заданного типа класса (для любого...

Создать динамический массив, любого простого типа (например: int, long, float, double)
1. Создать проект, который содержит консольную программу Win32. 2. Создать динамический массив,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru