Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для BattyBat
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 18

Зачем в данной программе нужно было использовать шаблоны?

08.06.2011, 16:27. Показов 963. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
сделан у меня шаблон для двунаправленного списка...причём список формируется по разному в зависимости от типа (инт, дабл и стринг)
вопрос: какие проблемы будут если я буду делать всё одинаково. короче зачем так нужно было сделать?


My_Set.cpp
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
void  My_Set<int>::remove(int key)
{
    SET<int> ^pv = gcnew SET<int>;
    pv = pbeg;
    if(pbeg->t == key)
    {
        pbeg=pbeg->next;
        pbeg->prev=nullptr;
    }
    else if(pend->t == key)
    {
        while(pv->next != pend)
                pv=pv->next;
        pv->next = nullptr;
        pend = pv;
    }
    else 
    {
        SET<int> ^temp = gcnew SET<int>;
            temp = pv;
            pv = pv->next;
            while(pv->next != nullptr)
            {
                if(pv->t == key)
                {
                    temp->next = pv->next;
                }
                temp = pv;
                pv = pv->next;
            }
    }
}
 
void  My_Set<double>::remove(double key)
{
    SET<double> ^pv = gcnew SET<double>;
    pv = pbeg;
    if(fabs(pbeg->t-key) <eps)
    {
        pbeg=pbeg->next;
        pbeg->prev=nullptr;
    }
    else if(fabs(pend->t-key) <eps)
    {
        while(pv->next != pend)
                pv=pv->next;
        pv->next = nullptr;
        pend = pv;
    }
    else 
    {
        SET<double> ^temp = gcnew SET<double>;
            temp = pv;
            pv = pv->next;
            while(pv->next != nullptr)
            {
                if(fabs(pv->t-key) <eps)
                {
                    temp->next = pv->next;
                }
                temp = pv;
                pv = pv->next;
            }
    }
}
 
void  My_Set<String^>::remove(String^ key)
{
    SET<String^> ^pv = gcnew SET<String^>;
    pv = pbeg;
    if(pbeg->t == key)
    {
        pbeg=pbeg->next;
        pbeg->prev=nullptr;
    }
    else if(pend->t == key)
    {
        while(pv->next != pend)
                pv=pv->next;
        pv->next = nullptr;
        pend = pv;
    }
    else 
    {
        SET<String^> ^temp = gcnew SET<String^>;
            temp = pv;
            pv = pv->next;
            while(pv->next != nullptr)
            {
                if(pv->t == key)
                {
                    temp->next = pv->next;
                }
                temp = pv;
                pv = pv->next;
            }
    }
}

My_Set.h
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
#pragma once
#include <math.h>
#include <string.h>
#define eps 1e-10
using namespace System;
template < class T>
 
ref struct SET
    {
        T t;
        SET^next;//указатель на последующий узел
        SET^prev;//указатель на предыдущий узел
    };
 
template < class T>
ref class My_Set
{
public:
    SET<T>^pend;//указатель на начало
    SET<T>^pbeg;//указатель на конец
    SET<T>^pv;
    My_Set() {};
//формирование первого элемента
void first(T t)
{
    SET<T>^pv=gcnew SET<T>;
    pv->t=t;
    pv->next=nullptr;
    pv->prev=nullptr;
    pbeg = pv;
    pend = pbeg;
}
//добавление в конец списка
    void add(T t)
{
    SET<T>^pv=gcnew SET<T>;
    pv->t=t;
    pv->next=nullptr;
    pv->prev=pend;
    pend->next=pv;
    pend=pv;
}
//поиск элемента
 SET<T>^poisk( T t)
{   
        SET<T>^pv=pbeg;
        while(pv)
        {
            if (pv->t==t) break;
            pv=pv->next;
        }
        return pv;
}
 void remove(T key);
 
};

Form.h
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
{
                 if(radioButton1->Checked)//тип int
                 {  
                     int t=(int)rand()%200;
                     M.first(t);
                     for(int i=0;i<5;i++)
                     {
                     t=(int)rand()%200;
                     M.add(t);
                     }
                     SET<int> ^pv=M.pbeg;
                     while (pv)
                     {
                     richTextBox1->AppendText(" "+Convert::ToString(pv->t));
                     pv=pv->next;
                     }
                     richTextBox1->AppendText("\n");
                    
                 }
                 else if(radioButton2->Checked)//тип double
                 {
                     double t=(double)rand()/(RAND_MAX+1)*(20-10)+10;
                     M1.first(t);
                     for(int i=0;i<5;i++)
                     {
                     t=(double)rand()/(RAND_MAX+1)*(20-10)+10;
                     M1.add(t);
                     }
                     SET<double> ^pv=M1.pbeg;
                     while (pv)
                     {
                     richTextBox1->AppendText(" "+Convert::ToString(pv->t));
                     pv=pv->next;
                     }
                     richTextBox1->AppendText("\n");
                    
                 }
                 else if(radioButton3->Checked)//тип char
                 {
                     String^t;
                    t=Convert::ToString("b");
                    M2.first(t);                    
                    t=Convert::ToString("a");
                    M2.add(t);
                    t=Convert::ToString("t");
                    M2.add(t);
                    t=Convert::ToString("t");
                    M2.add(t);
                    t=Convert::ToString("y");
                    M2.add(t);
                    t=Convert::ToString("k");
                    M2.add(t);                  
                    SET<String^> ^pv=M2.pbeg;
                     while (pv)
                     {
                    richTextBox1->AppendText(" "+(pv->t));
                     pv=pv->next;
                     }
                     richTextBox1->AppendText("\n");
                    
                    
                 }
             }
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
             {//удаление
                 
        
                 if(radioButton1->Checked)//тип int
                 {  
                     int key=Convert::ToInt32(textBox1->Text);
                    
                     M.remove(key);
                     SET<int> ^pv1=M.pbeg;
                     while (pv1)
                     {
                     richTextBox1->AppendText(" "+Convert::ToString(pv1->t));
                     pv1=pv1->next;
                     }
                     richTextBox1->AppendText("\n");
                 }
                 else if(radioButton2->Checked)//тип double
                 {
                      double key=Convert::ToDouble(textBox1->Text);
                     double t=(double)rand()/(RAND_MAX+1)*(20-10)+10;
                     M1.poisk(t);
                     M1.remove(key);
                     SET<double> ^pv1=M1.pbeg;
                     while (pv1)
                     {
                         richTextBox1->AppendText(" "+Convert::ToString(pv1->t));
                         pv1=pv1->next;
                     }
                     richTextBox1->AppendText("\n");
                     
                    
                 }
                 else if(radioButton3->Checked)//тип char
                 {
                     String^ key;
                    key=Convert::ToString(textBox1->Text);
                     M2.remove(key);
                     SET<String^> ^pv=M2.pbeg;
                    
                     while (pv)
                     {
                    richTextBox1->AppendText(" "+(pv->t));
                     pv=pv->next;
                     }
                     richTextBox1->AppendText("\n");
                    
                        
                 }
             }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.06.2011, 16:27
Ответы с готовыми решениями:

Использовать в данной программе процедуру с параметром
Использовать в данной программе процедуру с параметром program matrix; uses crt; var a: array of real; i,y,n,m: integer; ...

Зачем нужно использовать Action?
Один знакомый любит использовать Action. Так, меня заинтересовала эта тема. Зачем нужно использовать Action? И когда их нужно использовать?

Как в данной программе использовать указатель на массив записей?
Задание: Предусмотреть контроль за размером динамически распределяемой памяти (ДРП), а также ее освобождение после выполнения необходимых...

7
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.06.2011, 18:24
Цитата Сообщение от BattyBat Посмотреть сообщение
зачем так нужно было сделать?
Видимо, кому-то это было нужно. Нет?

Добавлено через 1 минуту
Как бы, ты не до конца понял смысл шаблонов. И вообще, это в раздел CLI.
0
 Аватар для BattyBat
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 18
08.06.2011, 18:24  [ТС]
это в задании нужно было. нужно - сделано.
защищать буду - спросят зачем. а если я не понимаю ничего то как я смогу на это ответить?)
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
08.06.2011, 18:31
BattyBat, Ану как озвучь задание полностью и дословно, мб это ты просто не так что-то понял.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.06.2011, 18:39
О! Увидел-таки различия в коде специализированных функций. Тогда, возможно, это именно то, что тебе требуется.
0
 Аватар для BattyBat
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 18
08.06.2011, 18:49  [ТС]
asics, Во всех вариантах требуется создать шаблон некоторого целевого класса А. Реализовать добавление элементов, удаление, поиск по ключу. Показать использование шаблонов для int, double, string.
у меня двунаправленый список.



Deviaphan,
Цитата Сообщение от BattyBat Посмотреть сообщение
какие проблемы будут если я буду делать всё одинаково?
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
08.06.2011, 18:58
Я же говорою что вы немного не правильно поняли задание,
Цитата Сообщение от BattyBat Посмотреть сообщение
Показать использование шаблонов для int, double, string.
Подразумевает следующие(покажу на стандартном векторе):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//Для int
std::vector<int> vec_i;
int i = 8;
vec_i.push_back(i);//Добавили
vec_i.erase(vec_i.begin());
 
//Для string
std::vector<std::string> vec_s;
std::string s = "qwerty";
vec_s.push_back(s);
vec_s.erase(vec_s.begin());
 
//И тд.
0
 Аватар для BattyBat
0 / 0 / 0
Регистрация: 31.05.2011
Сообщений: 18
08.06.2011, 19:13  [ТС]
asics, ненене))) сделано всё правильно. эта лаба проверена уже. осталось только защитить.(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.06.2011, 19:13
Помогаю со студенческими работами здесь

Зачем использовать delete в небольшой программе, если после закрытия память все равно освободится?
Можно ли использовать new без delete, если программка небольшая, а также если нет класса вообще можно использовать new? И еще, после...

Зачем нужно использовать инициализаторы элемент-данных класса?
Имеется фрагмент кода. Если быть точным, то описание класса. #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;Windows.h&gt;...

Как работает внедрение зависимостей, и зачем нужно его использовать?
Как работает внедрение зависимостей? И в каких ситуациях, зачем нужно его использовать?Например если я объявил поле как @Inject то как к...

что нужно использовать в данной задаче?
Вероятность брака при изготовлении некоторого изделия равна 0.02.Найти вероятность того, что среди 200 произведенных изделий будет не более...

Зачем в языке LISP нужно использовать функцию reverse (на конкретном примере)
Добрый день. Рассмотрим такую функцию: (defun findLst (lst lstToFind index path) (cond ((null lst) nil) ((equal (car...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru