Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 3

Загадки STL

06.02.2010, 21:08. Показов 1420. Ответов 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
75
76
77
78
79
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
 
static int si= 1000;
 
  class testr{
    private:
    public:
     
     string      *st1;
    
      int i;
      testr();        // конструктор
      ~testr();        // деструктор
      bool operator<(testr);
      bool operator==(testr);
      
  };
  
  testr::testr(){
    
    si++;
    cout << "creatr=" << this << " si=" << si<< endl;
    st1 = new string( "string1");
   
    i = 0;
 
  }
  
  testr::~testr()
  {
         si-- ;
      cout << "destr=" << this << " si=" << si<< endl;
 
    delete st1;
    st1 = NULL;
    
  }
  
      bool testr::operator<(testr a){
    return this->st1 < a.st1;
      }
      bool testr::operator==(testr a){
    return this->st1 == a.st1;
      }
 
  
  
 
 
   int main(int argc, char **argv) {
    vector <testr> *vt;
    vector <testr>::iterator ivt;
      testr *t1; 
 
      int j;
     
    vt = new vector <testr>;
 
     
     t1 = new testr();
     
       
     for ( j = 0; j < 100 ; j++){ 
    t1->i = j;
    vt->push_back(*t1);
     }
    
     cout << " получилось" << endl;
     for (ivt = vt->begin(); ivt != vt->end(); ivt++){
       cout <<" "<< ivt->i <<endl;    
     }
  
     return 0;
   }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.02.2010, 21:08
Ответы с готовыми решениями:

Головоломка загадки Загадки Да'Винчи
Нашел интересную игру на google play, ...

Загадки ...
1. Дано: На системных часах на локальной машинке время 17.07.2007 09:06. На сервере время 17.07.2007 09:06. Вопрос: почему при...

Загадки
Отгадивайте загадки, и задавайте свои 1. Горел лес и когда его затушили, то там нашли мертвого водолаза. Как он там оказался? 2. как...

6
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
06.02.2010, 21:57
Разумеется, никаких загадок тут нет. Ошибки - в твоем коде.
В классе testr :
1. конструктор копирования - где?
2. оператор=() - где?
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
06.02.2010, 22:24
а при чем тут STL ? ошибки в вашем классе.
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 3
07.02.2010, 20:33  [ТС]
Спасибо за наставления! Исправлюсь - честное слово .

Добавлено через 5 часов 41 минуту
Пределал код в соответствии с рекомендациями (добавил определение операции =). Ошибка осталась ( почему вызовов дестрой(я) больше вызовов чем построй).
Для проверки себя привожу код ( см ниже ), и если не трудно ткните носом в документашку где написано чего надо реализовывать у "гостевых" классов.
/*
Тестовый файл 1
*/
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
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
 
static int si= 1000;
  class testr{
    private:
    testr *the;
    int    act;
    public:
     
     string      *st1;
    
      int i;
      testr();        // конструктор
      ~testr();        // деструктор
      bool operator<(testr);
      bool operator==(testr);
      testr operator=(testr);
      
      
  };
  
  testr::testr(){
    act = 1;
      
    the = this;    // запомнить объект
    si++;
    cout << "creatr=" << this << " si=" << si<< endl;
    st1 = new string( "string1");
   
    i = 0;
 
  }
  
  testr::~testr()
  {
  
    
      act =0;
      si-- ;
      cout << "destr=" << this << " si=" << si<< endl;
     
      delete st1;
    
     
     
      
  }
  
      bool testr::operator<(testr a){
    return this->st1 < a.st1;
      }
      bool testr::operator==(testr a){
    return this->st1 == a.st1;
      }
     testr testr::operator=(testr a){
       this->i = a.i;
       *(this->st1) = *(a.st1);
     }
  
  
 
 
   int main(int argc, char **argv) {
    vector <testr> *vt;
    vector <testr>::iterator ivt;
    
    
    
      testr *t1; 
 
      
      int j;
      int i;
     
    vt = new vector <testr>;
 
     
     t1 = new testr();
     
       
     for ( j = 0; j < 100 ; j++){ 
    t1->i = j;
    vt->push_back(*t1);
     }
    
     cout << " получилось" << endl;
     for (ivt = vt->begin(); ivt != vt->end(); ivt++){
       cout <<" "<< ivt->i <<endl;    
     }
  
     return 0;
   }
Добавлено через 32 минуты
Осознаю!

Реализовал копирование класса, и все вернулось на место. При этом, в моем случае, не одна "девушка" не воспользовалась оператором =.

Для ликвидации детских граблей привожу код который у меня работает.
/*
Тестовый файл 1
*/
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
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
 
static int si= 1000;
  class testr{
    private:
    testr *the;
    int    act;
    public:
     
     string      *st1;
    
      int i;
      testr();        // конструктор
      testr(const testr&);    //
      ~testr();        // деструктор
      bool operator<(testr);
      bool operator==(testr);
      testr operator=(testr);
      
      
  };
  
  testr::testr(){
    act = 1;
      
    the = this;    // запомнить объект
    si++;
    cout << "creatr=" << this << " si=" << si<< endl;
    st1 = new string( "string1");
   
    i = 0;
 
  }
  
  
testr::testr ( const testr& a )
{
    act = 1;
      
    the = this;    // запомнить объект
    si++;
    cout << "creatr=" << this << " si=" << si<< endl;
 
    st1 = new string( *(a.st1));
    i = a.i;
}
 
  
  testr::~testr()
  {
  
    
      act =0;
      si-- ;
      cout << "destr=" << this << " si=" << si<< endl;
     
      delete st1;
    
     
     
      
  }
  
      bool testr::operator<(testr a){
    return this->st1 < a.st1;
      }
      bool testr::operator==(testr a){
    return this->st1 == a.st1;
      }
     testr testr::operator=(testr a){
       this->i = a.i;
       *(this->st1) = *(a.st1);
     }
  
  
 
 
   int main(int argc, char **argv) {
    vector <testr> *vt;
    vector <testr>::iterator ivt;
    
    
    
      testr *t1; 
 
      
      int j;
      int i;
     
    vt = new vector <testr>;
 
     
     t1 = new testr();
     
       
     for ( j = 0; j < 100 ; j++){ 
    t1->i = j;
    vt->push_back(*t1);
     }
    
     cout << " получилось" << endl;
     for (ivt = vt->begin(); ivt != vt->end(); ivt++){
       cout <<" "<< ivt->i <<endl;    
     }
  
     return 0;
   }
На это прдлагаю дискусию закрыть.
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
07.02.2010, 20:48
sega074, епс, отформатируй код, и вставь в тэги. глаз же жалко.
0
 Аватар для oxotnik
1665 / 1134 / 80
Регистрация: 21.08.2008
Сообщений: 4,734
Записей в блоге: 1
08.02.2010, 12:14
в общем то в мануалах к STL говорилось о требованиях к объектам, помещаемым в контейнеры, что нужны конструктор копирования и перегруженный оператор присваивания.
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 3
08.02.2010, 12:19  [ТС]
CheshireCat выражаю свою признательность за наставления

Сергей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.02.2010, 12:19
Помогаю со студенческими работами здесь

Идиотские загадки
Есть категория задач, загадок, вопросов, на которые невозможно дать ответ, пользуясь нормальной логикой здорового человека. Тем не менее,...

Психологические загадки
Нашёл в нете.

Просто загадки (2)
Свою загадку можно задать, только ответив на загадку от предыдущего участника. Загадки без подвохов, с реальными ответами. Чур не...

Экзотические загадки
Где применяется высокочастотное высоковольтное напряжение в быту? Где применяется высокочастотное низковольтное напряжение в быту? Где...

Детские загадки!
Детская загадка, которая задается детям в садике...я три часа ломал голову, только потом более менее четко ответил.... 6589 = 4 ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru