Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 5

Создать матрицу используя умные указатели

25.02.2018, 00:19. Показов 7037. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем есть задание создать двойной массив на "умных указателях" (shared_ptr , unique_ptr, week_ptr)


В общем как я не пытался у меня были траблы с привидением типов.
Можете накидать пример, создание двумерного массива на умных указателях и передача его в функию
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2018, 00:19
Ответы с готовыми решениями:

Умные указатели
Разбираюсь с умными указателями. Попытался переписать кусок кода используя shared_ptr. Было Btree::Btree() { m_root=nullptr; } ...

Умные указатели
Насколько я понял для того что бы предотвратить передачу права владения используют const. Код из примера: template <class T> ...

Умные указатели
Пишу класс дерево поиска:template<typename T, typename Compare> class AvlTree { private: struct Node { T...

11
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
25.02.2018, 00:56
Цитата Сообщение от Lord9000 Посмотреть сообщение
двойной массив
Что это за зверь такой?
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.02.2018, 02:40
Цитата Сообщение от Новичок Посмотреть сообщение
Что это за зверь такой?
C++
1
int arr[10][20];
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
25.02.2018, 02:56
nd2, или
C++
1
2
3
4
5
6
7
int dvoynoy_massiv[2];
// ...
unsigned const N =1;
int dvoynoy_massiv[2 * N];
// ...
int original[100500];
int * dvoynoy_massiv = original + 2;
или еще варианты динамической памятью и библиотечными контейренами
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.02.2018, 03:07
Цитата Сообщение от outoftime Посмотреть сообщение
или еще варианты динамической памятью
Там, строго говоря, уже не массивы (как тип данных).
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
25.02.2018, 03:28
Цитата Сообщение от nd2 Посмотреть сообщение
Там, строго говоря, уже не массивы (как тип данных).
Значит это "массивы 2.0" - двойные, т.е. то что надо.
0
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 5
25.02.2018, 13:36  [ТС]
соре ребят, писал уже в уставший. Двойной массив - Двумерный.

Добавлено через 48 секунд
Но вопрос в том как сделать двумерный массив на умных указателях
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
25.02.2018, 15:28
Закодил. Правда вышло наверно не очень, но для начала пойдет.
http://rextester.com/EXG83023
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 <memory>
 
template <class T>
class Matrix {
public:
    using num_type = T;
    using size_type = std::size_t;
    using arr_ptr_type = std::unique_ptr<num_type[]>;
private:
    size_type n, m;
    std::unique_ptr<arr_ptr_type[]> a;
public:
    Matrix(size_type n, size_type m): n(n), m(m), a(std::make_unique<arr_ptr_type[]>(n))
    {
        for (size_type i = 0; i < n; i++)
            a[i] = std::make_unique<num_type[]>(m);
    }
        
    num_type& elem(size_type i, size_type j) {
        return a[i][j];
    }
    
    size_type getRowCount() { return n; }
    size_type getColCount() { return m; }
};
 
int main() {
    Matrix<int> m(5, 5);
    for (std::size_t i = 0; i < m.getRowCount(); i++) {
        for (std::size_t j = 0; j < m.getColCount(); j++)
            m.elem(i, j) = i + j, std::cout << m.elem(i, j) << ' ';
        std::cout << '\n';
    }
}
0
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 5
25.02.2018, 16:23  [ТС]
Цитата Сообщение от Новичок Посмотреть сообщение
, m(m), a(std::make_unique<arr_ptr_type[]>(n))
* * {
* * * * for (size_type i = 0; i < n; i++)
* * * * * * a[i] = std::make_unique<num_type[]>(m);
* * }
num_type& elem(size_type i, size_type j) {
* * * * return a[i][j];
* * }
size_type getRowCount() { return n; }
* * size_type getColCount() { return m; }
};
int main() {
* * Matrix<int> m(5, 5);
* * for (std::size_t i = 0; i < m.getRowCount(); i++) {
* * * * for (std::size_t j = 0; j < m.getColCount(); j++)
* * * * * * m.elem(i, j) = i + j, std::cout << m.elem(i, j) << ' ';
* * * * std::cout << '\n';
* * }
}
Спасибо, но я темлейтами еще не связывался, но с этим думаю разберусь.

Можете прокомментировать этот отрывок
Code
1
2
3
4
5
6
7
8
9
 Matrix(size_type n, size_type m): n(n), m(m), a(std::make_unique<arr_ptr_type[]>(n))
    {
        for (size_type i = 0; i < n; i++)
            a[i] = std::make_unique<num_type[]>(m);
    }
        
    num_type& elem(size_type i, size_type j) {
        return a[i][j];
    }
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
27.02.2018, 02:41
Лучший ответ Сообщение было отмечено Lord9000 как решение

Решение

Цитата Сообщение от Lord9000 Посмотреть сообщение
Matrix(size_type n, size_type m)
конструктор класса

Цитата Сообщение от Lord9000 Посмотреть сообщение
n(n), m(m)
иинциализизует значение n & m

Цитата Сообщение от Lord9000 Посмотреть сообщение
a(std::make_unique<arr_ptr_type[]>(n))
и создает массив std::unique_ptr типа

Цитата Сообщение от Новичок Посмотреть сообщение
using arr_ptr_type = std::unique_ptr<num_type[]>;
и

Цитата Сообщение от Lord9000 Посмотреть сообщение
for (size_type i = 0; i < n; i++)
a[i] = std::make_unique<num_type[]>(m);
инициализирует строки типа num_type

Цитата Сообщение от Lord9000 Посмотреть сообщение
num_type& elem(size_type i, size_type j)
возвращает значение элемента по ссылке для возможности изменения значения

C++
1
2
3
Matrix<int> a(rows, columns);
/// ...
a.elem(i, j) = 2;
1
0 / 0 / 0
Регистрация: 24.05.2017
Сообщений: 5
27.02.2018, 12:19  [ТС]
Code
1
Matrix(size_type n, size_type m): n(n), m(m), a(std::make_unique<arr_ptr_type[]>(n))
Последний вопрос. Как работает "двоеточие". Чем оно отличается от обычного
Code
1
2
3
Name()
{
}
0
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
27.02.2018, 13:27
Lord9000, это называется список инициализации конструктора, можно погуглить и почитать про него.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2018, 13:27
Помогаю со студенческими работами здесь

Умные указатели
Здравствуйте! вопрос указатель auto_ptr почитала литературу, там написано он считывает и удаляет ссылки, т.е. он получает какие-то...

Умные указатели
Привет. Что-то разобраться до конца не могу, тк умных указателей не так то мало оказывается. Мне интересно, если я выделяю память под...

Умные указатели
Правильно ли я понял, что умный указатель - это просто шаблон класса, содержащий в себе указатель Type *p и его delete в деструкторе?

умные указатели
у меня например есть куча юнитов, у каждого из них есть указатель на игровой ресурс (допустим камень). Есть такая задумка: когда камень...

Умные указатели
#include &lt;fstream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;memory&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru