Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
#1

Сортировка в двунаправленном списке - C++

14.01.2013, 00:49. Просмотров 614. Ответов 15
Метки нет (Все метки)

ШАБЛОН КЛАССА

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
#include <iostream>
 
using namespace std;
 
template <typename T>
class List
{
    struct Node
    {
        T data;
        Node *next, *prev;
        Node(T d, Node *n = 0, Node *p = 0):data(d), next(n), prev(p) {}
    };
    Node *head;
public:
    List(Node *h = 0):head(h){}
    ~List();
    bool isEmpty();
    void insertAfter(Node *pre, T d);
    void removeAfter(Node *pre);
    void pushFront(T d);
    T popFront();
    void print();
    Node *search(T d);
    void create(int k);
    void createFrom();
    bool is();
};
 
template <typename T>
List<T>::~List()
{
    while (!isEmpty())
       popFront();
}
 
template <typename T>
void List<T>::print()
{
    if(!head) return;
    Node *cur  = head;
    while(cur) {
        cout << cur->data << "; ";
        cur = cur->next;
    }
    cout << endl;
}
 
template <typename T>
void List<T>::create(int k)
{
    T d;
    for (int i = 1; i <= k; i++)
    {
        cout << "Enter " << i << "-i element: ";
        cin >> d;
        pushFront(d);
    }
}
 
template <typename T>
void List<T>::createFrom()
{
    Node    *p, *p_, *pt, *pt_;
p_=head; p=p_;
     while( p_ ) {
             if( p->next->data > p ->data )
             {pt=p; pt_= p->prev; p->prev=p->next->prev; p->next->prev=pt_; p=p->next; p->next=p; delete pt; delete pt_; }
             
             
             
     p_ = p_ ->next;}
}
САМА ПРОГРАММА

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 #include "List_dv.h"
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
   
    List<string> *L1 = new List<string>(NULL);
    L1->create(3);
    L1->print();
    L1->createFrom();
    L1->print();
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
пытаюсь сделать сортировку но что то накосячил , помогите разобраться
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2013, 00:49     Сортировка в двунаправленном списке
Посмотрите здесь:

Сортировка в двусвязном списке - C++
Здравствуйте! Есть класс List, в него вложен класс Node, в Node в качестве данных используется класс Circle Задание: Написать для...

Сортировка вставками в односвязном списке - C++
Собственно нужно реализовать такую сортировку, но что-то не могу я придумать как её реализовать именно в односвязном списке, у нас ведь...

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

Сортировка в списке. Запутался с укахателями - C++
Задание: создать список с записями автомабилей, отсортировать по году. запутался в адресах и указателях, сортировку вставками...

Сортировка пузырьком в списке и поиск ключа - C++
Добрый вечер! Как мне найти ключ Х и вставить после него какое-то число, например 000? И как сделать сортировку пузырьком? ...

Ошибка в списке - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; template&lt;typename T&gt; class IList { public: ...

Удаление в списке - C++
Реализован метод удаления после какого-то элемента в спике: void remove(Node *where) { if (nodes&gt;1 &amp;&amp; where-&gt;next != 0) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mac_alleb
7 / 7 / 0
Регистрация: 05.08.2011
Сообщений: 54
14.01.2013, 01:28     Сортировка в двунаправленном списке #2
Да, "накосячено", здорово , похоже все надо переделывать... Есть опыт работы со списками, стоит браться?
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
14.01.2013, 18:38  [ТС]     Сортировка в двунаправленном списке #3
ну когда то со списками работал ... а в си как то не очень получается

Добавлено через 6 часов 29 минут
попробовал по другому , решил просто менять информационную часть
первый элемент со вторым меняется а вот остальные никак
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template <typename T>
void List<T>::createFrom()
{T data;
    Node    *p, *p_, *pt, *pt_;
pt=head;
 
 
p=head;
p_=head;
     while( p_ ) {p=p_;
             
             if( p->next->data > p ->data )
            { data=p->data; p->data=p->next->data; p->next->data=data;}
        //     {pt=p; pt_= p->prev; p->prev=p->next->prev; p->next->prev=pt_; p=p->next; p->next=p; delete pt; delete pt_; }
             
            
     p_ = p_ ->next;}
}
помогите плиз
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
14.01.2013, 18:48     Сортировка в двунаправленном списке #4
Не лучше ли пойти др путем:

- выделить временный массив Node *
- отсортировать его (std::sort, qsort или самому если так хочется)
- прописать в массиве prev и next
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
14.01.2013, 19:04  [ТС]     Сортировка в двунаправленном списке #5
а можно это кодом описать если не сложно , просто в си я не силен ... буду очень признателен
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
14.01.2013, 19:41     Сортировка в двунаправленном списке #6
Цитата Сообщение от IraDiz Посмотреть сообщение
а можно это кодом описать если не сложно , просто в си я не силен ... буду очень признателен
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
// functor
bool MyComp( Node * n1, Node * n2 )
{
 return n1->data < n2->data;
}
 
void List<T>::Sort( void )
{
 size_t count = Size();
 if (count < 2) return;
 Node ** temp = new Node * [count];
 
// fill array
 size_t num = 0;
 while (head) {
    temp[num++] = head;
    head = head->next;
 }
 
// sort
  std::sort(temp, temp + count, MyComp);
 
// set links
  head = temp[0];
  for (size_t i = 0; i < count; ++i) {
    temp[i]->next = (i < count - 1) ? temp[i + 1] : 0; 
    temp[i]->prev = (i > 0) ? temp[i - 1] : 0; 
  }
 
// get rid of temp 
  delete [] temp; 
}
 
size_t List<T>::Size( void ) const
{
 size_t num = 0;
 const Node * n = head;
 while (n) {
  ++num;
  n = n->next;
 }
 return num;
}
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
14.01.2013, 21:06  [ТС]     Сортировка в двунаправленном списке #7
огромное спасибо , буду пробовать

Добавлено через 52 минуты
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
// functor
 
template <typename T>
bool List<T>::MyComp( Node *n1, Node *n2 )
{
 return n1->data < n2->data;
}
 
template <typename T> 
void List<T>::Sort()
{
 size_t count = Size();
 if (count < 2) return;
 Node ** temp = new Node * [count];
 
// fill array
 size_t num = 0;
 while (head) {
    temp[num++] = head;
    head = head->next;
 }
 
// sort
  std::sort(temp, temp + count, MyComp);
 
// set links
  head = temp[0];
  for (size_t i = 0; i < count; ++i) {
    temp[i]->next = (i < count - 1) ? temp[i + 1] : 0; 
    temp[i]->prev = (i > 0) ? temp[i - 1] : 0; 
  }
 
// get rid of temp 
  delete [] temp; 
}
template <typename T>  
size_t List<T>::Size() const
{
 size_t num = 0;
 const Node *n = head;
 while (n) {
  ++num;
  n = n->next;
 }
 return num;
}
не могу ошибки исправить

In file included from C:\Users\IraDiz\Desktop\2.cpp:1:
C:\Users\IraDiz\Desktop\/List_dv.h:197: error: prototype for `size_t List<T>::Size() const' does not match any in class `List<T>'

C:\Users\IraDiz\Desktop\/List_dv.h:29: error: candidate is: size_t List<T>::Size()

C:\Users\IraDiz\Desktop\/List_dv.h:197: error: template definition of non-template `size_t List<T>::Size() const'

C:\Users\IraDiz\Desktop\2.cpp: In function `int main()':
C:\Users\IraDiz\Desktop\2.cpp:13: error: 'class List<std::string>' has no member named 'sort'

Execution terminated
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
14.01.2013, 21:32     Сортировка в двунаправленном списке #8
Добавьте в описание класса Sort и Size

C++
1
2
3
4
5
6
7
8
9
10
template <typename T>
class List
{
...
public:
  ...
  void Sort( void );
  size_t Size( void ) const;
  ...
 };
А функтор (MyComp) не делайте template, оставьте как был
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
14.01.2013, 22:12  [ТС]     Сортировка в двунаправленном списке #9
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#include <iostream>
 
using namespace std;
 
template <typename T>
class List
{
    struct Node
    {
        T data;
        Node *next, *prev;
        Node(T d, Node *n = 0, Node *p = 0):data(d), next(n), prev(p) {}
    };
    Node *head;
public:
    List(Node *h = 0):head(h){}
    ~List();
    bool isEmpty();
    void insertAfter(Node *pre, T d);
    void removeAfter(Node *pre);
    void pushFront(T d);
    T popFront();
    void print();
    Node *search(T d);
    void create(int k);
    void createFrom();
  void Sort( void );
  size_t Size( void ) const;
};
 
template <typename T>
List<T>::~List()
{
    while (!isEmpty())
       popFront();
}
 
template <typename T>
bool List<T>::isEmpty() 
{
    return !head;
}
 
template <typename T>
void List<T>::insertAfter(Node *pre, T d) 
{ 
    if(!pre) return;
    Node *newNode = new Node(d,0,0);
    newNode->prev = pre;
    newNode->next = pre->next;
    pre->next = newNode;
}
 
template <typename T>
void List<T>::removeAfter(Node *pre)
{
    if (!pre || !pre->next) return;
    Node *tmp = pre->next; 
    if (!tmp->next)
    {
        pre->next = NULL;
    }
    else
    {
        tmp->next->prev = pre;
        pre->next = tmp->next;
    }
    delete tmp; 
}
 
template <typename T>
void List<T>::pushFront(T d)
{
    Node *newNode = new Node(d,0,0);
    if(!head) {
        head = newNode;
        return;
    }
    newNode->next = head;
    newNode->prev = NULL;
    head->prev = newNode;
    head = newNode;
}
 
template <typename T>
T List<T>::popFront()
{
    T data;                 
    if(!head) return data;
    Node *tmp = head;
    data = head->data;
    if(head->next) {
        head = head->next;
        head->prev = NULL;
        delete tmp;
        return data;
    }
    delete tmp;
    head = NULL;
    return data;
}
 
template <typename T>
typename List<T>::Node* List<T>::search(T d)
{
    if(!head) return NULL;
    Node* cur = head;
    while(cur) {
        if(cur->data == d) return cur;
        cur = cur->next;
    }
    return NULL;
}
 
 
template <typename T>
void List<T>::print()
{
    if(!head) return;
    Node *cur  = head;
    while(cur) {
        cout << cur->data << "; ";
        cur = cur->next;
    }
    cout << endl;
}
 
template <typename T>
void List<T>::create(int k)
{
    T d;
    for (int i = 1; i <= k; i++)
    {
        cout << "Enter " << i << "-i element: ";
        cin >> d;
        pushFront(d);
    }
}
 
template <typename T>
void List<T>::createFrom()
{T data;
    Node    *p, *p_, *pt, *pt_;
pt=head;
 
 
p=head;
p_=head;
     while( p_ ) {p=p_;
             
             if( p->next->data > p ->data )
            { data=p->data; p->data=p->next->data; p->next->data=data;}
        //     {pt=p; pt_= p->prev; p->prev=p->next->prev; p->next->prev=pt_; p=p->next; p->next=p; delete pt; delete pt_; }
             
            
     p_ = p_ ->next;}
}
 
// functor
 
template <typename T>
bool List<T>::MyComp( Node *n1, Node *n2 )
{
 return n1->data < n2->data;
}
 
template <typename T> 
void List<T>::Sort()
{
 size_t count = Size();
 if (count < 2) return;
 Node ** temp = new Node * [count];
 
// fill array
 size_t num = 0;
 while (head) {
    temp[num++] = head;
    head = head->next;
 }
 
// sort
  std::sort(temp, temp + count, MyComp);
 
// set links
  head = temp[0];
  for (size_t i = 0; i < count; ++i) {
    temp[i]->next = (i < count - 1) ? temp[i + 1] : 0; 
    temp[i]->prev = (i > 0) ? temp[i - 1] : 0; 
  }
 
// get rid of temp 
  delete [] temp; 
}
template <typename T>  
size_t List<T>::Size() const
{
 size_t num = 0;
 const Node *n = head;
 while (n) {
  ++num;
  n = n->next;
 }
 return num;
}
In file included from C:\Users\IraDiz\Desktop\2.cpp:1:
C:\Users\IraDiz\Desktop\/List_dv.h:163: error: no `bool List<T>::MyComp(List<T>::Node*, List<T>::Node*)' member function declared in class `List<T>'
C:\Users\IraDiz\Desktop\/List_dv.h:163: error: template definition of non-template `bool List<T>::MyComp(List<T>::Node*, List<T>::Node*)'
C:\Users\IraDiz\Desktop\/List_dv.h: In member function `void List<T>::Sort()':
C:\Users\IraDiz\Desktop\/List_dv.h:182: error: `MyComp' undeclared (first use this function)
C:\Users\IraDiz\Desktop\/List_dv.h:182: error: (Each undeclared identifier is reported only once for each function it appears in.)

C:\Users\IraDiz\Desktop\2.cpp: In function `int main()':
C:\Users\IraDiz\Desktop\2.cpp:13: error: 'class List<std::string>' has no member named 'sort'

Execution terminated
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
14.01.2013, 22:28     Сортировка в двунаправленном списке #10
Ответы-то читайте
Цитата Сообщение от Igor3D Посмотреть сообщение
А функтор (MyComp) не делайте template, оставьте как был
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
14.01.2013, 22:34  [ТС]     Сортировка в двунаправленном списке #11
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <iostream>
 
using namespace std;
 
template <typename T>
class List
{
    struct Node
    {
        T data;
        Node *next, *prev;
        Node(T d, Node *n = 0, Node *p = 0):data(d), next(n), prev(p) {}
    };
    Node *head;
public:
    List(Node *h = 0):head(h){}
    ~List();
    bool isEmpty();
    void insertAfter(Node *pre, T d);
    void removeAfter(Node *pre);
    void pushFront(T d);
    T popFront();
    void print();
    Node *search(T d);
    void create(int k);
    void createFrom();
  void Sort( void );
  size_t Size( void ) const;
};
 
template <typename T>
List<T>::~List()
{
    while (!isEmpty())
       popFront();
}
 
template <typename T>
bool List<T>::isEmpty() 
{
    return !head;
}
 
template <typename T>
void List<T>::insertAfter(Node *pre, T d) 
{ 
    if(!pre) return;
    Node *newNode = new Node(d,0,0);
    newNode->prev = pre;
    newNode->next = pre->next;
    pre->next = newNode;
}
 
template <typename T>
void List<T>::removeAfter(Node *pre)
{
    if (!pre || !pre->next) return;
    Node *tmp = pre->next; 
    if (!tmp->next)
    {
        pre->next = NULL;
    }
    else
    {
        tmp->next->prev = pre;
        pre->next = tmp->next;
    }
    delete tmp; 
}
 
template <typename T>
void List<T>::pushFront(T d)
{
    Node *newNode = new Node(d,0,0);
    if(!head) {
        head = newNode;
        return;
    }
    newNode->next = head;
    newNode->prev = NULL;
    head->prev = newNode;
    head = newNode;
}
 
template <typename T>
T List<T>::popFront()
{
    T data;                 
    if(!head) return data;
    Node *tmp = head;
    data = head->data;
    if(head->next) {
        head = head->next;
        head->prev = NULL;
        delete tmp;
        return data;
    }
    delete tmp;
    head = NULL;
    return data;
}
 
template <typename T>
typename List<T>::Node* List<T>::search(T d)
{
    if(!head) return NULL;
    Node* cur = head;
    while(cur) {
        if(cur->data == d) return cur;
        cur = cur->next;
    }
    return NULL;
}
 
 
template <typename T>
void List<T>::print()
{
    if(!head) return;
    Node *cur  = head;
    while(cur) {
        cout << cur->data << "; ";
        cur = cur->next;
    }
    cout << endl;
}
 
template <typename T>
void List<T>::create(int k)
{
    T d;
    for (int i = 1; i <= k; i++)
    {
        cout << "Enter " << i << "-i element: ";
        cin >> d;
        pushFront(d);
    }
}
 
template <typename T>
void List<T>::createFrom()
{T data;
    Node    *p, *p_, *pt, *pt_;
pt=head;
 
 
p=head;
p_=head;
     while( p_ ) {p=p_;
             
             if( p->next->data > p ->data )
            { data=p->data; p->data=p->next->data; p->next->data=data;}
        //     {pt=p; pt_= p->prev; p->prev=p->next->prev; p->next->prev=pt_; p=p->next; p->next=p; delete pt; delete pt_; }
             
            
     p_ = p_ ->next;}
}
 
// functor
bool MyComp( Node * n1, Node * n2 )
{
 return n1->data < n2->data;
}
 
template <typename T> 
void List<T>::Sort( void )
{
 size_t count = Size();
 if (count < 2) return;
 Node ** temp = new Node * [count];
 
// fill array
 size_t num = 0;
 while (head) {
    temp[num++] = head;
    head = head->next;
 }
 
// sort
  std::sort(temp, temp + count, MyComp);
 
// set links
  head = temp[0];
  for (size_t i = 0; i < count; ++i) {
    temp[i]->next = (i < count - 1) ? temp[i + 1] : 0; 
    temp[i]->prev = (i > 0) ? temp[i - 1] : 0; 
  }
 
// get rid of temp 
  delete [] temp; 
}
 
template <typename T> 
size_t List<T>::Size( void ) const
{
 size_t num = 0;
 const Node * n = head;
 while (n) {
  ++num;
  n = n->next;
 }
 return num;
}
In file included from C:\Users\IraDiz\Desktop\2.cpp:1:
C:\Users\IraDiz\Desktop\/List_dv.h:160: error: `Node' was not declared in this scope
C:\Users\IraDiz\Desktop\/List_dv.h:160: error: `n1' was not declared in this scope
C:\Users\IraDiz\Desktop\/List_dv.h:160: error: `Node' was not declared in this scope
C:\Users\IraDiz\Desktop\/List_dv.h:160: error: `n2' was not declared in this scope
C:\Users\IraDiz\Desktop\/List_dv.h:161: error: initializer expression list treated as compound expression
C:\Users\IraDiz\Desktop\/List_dv.h:161: error: expected `,' or `;' before '{' token

C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `void std:artial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2508: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Size = int, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2591: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2319: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp = List<std::string>::Node*, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2521: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Size = int, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2591: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:124: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:125: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:127: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:131: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:133: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `_RandomAccessIterator std::__unguarded_partition(_RandomAccessIterator, _RandomAccessIterator, _Tp, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Tp = List<std::string>::Node*, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2521: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Size = int, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2591: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2041: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2044: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2220: instantiated from `void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2593: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2145: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h: In function `void std::__unguarded_linear_insert(_RandomAccessIterator, _Tp, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Tp = List<std::string>::Node*, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2151: instantiated from `void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2220: instantiated from `void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2593: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2093: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h: In function `void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Distance = int, _Tp = List<std::string>::Node*, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h:404: instantiated from `void std::make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2317: instantiated from `void std:artial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2508: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Size = int, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2591: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h:279: error: `__comp' cannot be used as a function
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h: In function `void std::__push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Distance = int, _Tp = List<std::string>::Node*, _Compare = bool]':
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h:291: instantiated from `void std::__adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Distance = int, _Tp = List<std::string>::Node*, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h:404: instantiated from `void std::make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2317: instantiated from `void std:artial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2508: instantiated from `void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Size = int, _Compare = bool]'
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_algo.h:2591: instantiated from `void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = List<std::string>::Node**, _Compare = bool]'
C:\Users\IraDiz\Desktop\/List_dv.h:180: instantiated from `void List<T>::Sort() [with T = std::string]'
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:/Dev-Cpp/include/c++/3.4.2/bits/stl_heap.h:166: error: `__comp' cannot be used as a function

Execution terminated

стало все очень страшно
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
14.01.2013, 23:15     Сортировка в двунаправленном списке #12
Цитата Сообщение от IraDiz Посмотреть сообщение
стало все очень страшно
Это она на template огрызается
Ладно, давайте попробуем так
C++
1
2
3
4
5
template <typename Node>
bool MyComp( Node *n1, Node *n2 )
{
 return n1->data < n2->data;
}
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
14.01.2013, 23:44  [ТС]     Сортировка в двунаправленном списке #13
C:\Users\IraDiz\Desktop\/List_dv.h: In member function `void List<T>::Sort() [with T = std::string]':
C:\Users\IraDiz\Desktop\2.cpp:13: instantiated from here
C:\Users\IraDiz\Desktop\/List_dv.h:182: error: no matching function for call to `sort(List<std::string>::Node**&, List<std::string>::Node**, <unknown type>)'

Execution terminated
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
15.01.2013, 10:17     Сортировка в двунаправленном списке #14
Пришлось самому откомпилировать
C++
1
2
3
4
5
6
7
8
// functor
template <typename Node>
struct MyComp {
    bool operator () ( Node * n1, Node * n2 ) const
    {
        return n1->data < n2->data;
    }
};
А вызывать так
C++
1
2
// sort
    std::sort(temp, temp + count, MyComp <Node> ());
IraDiz
0 / 0 / 0
Регистрация: 14.01.2013
Сообщений: 10
15.01.2013, 10:22  [ТС]     Сортировка в двунаправленном списке #15
большое спасибо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 10:24     Сортировка в двунаправленном списке
Еще ссылки по теме:

Поиск в списке - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstring&gt; #include &lt;windows.h&gt; using namespace std; struct element{ ...

Коструктор в списке - C++
Извините что неуч и спрашиваю дебильные вопросы. Вот к примеру: обыкновенный двусвязный список, хочу перегрузить конструктор, что бы не...

непонятка в связном списке - C++
есть 2 конструктора - list(const str&amp;) и list() если в main использую 1ый конструктор, то всё работает, если 2ой - ошибка, всякие там...

Подбор блоков в списке - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;locale.h&gt; #include &lt;stdio.h&gt; using namespace std; struct Node { int...

Тройное равенство в списке - C++
Здраствуйте, в программе создается динамический односвязный кольцевой список. Для этого создана структура с двумя &quot;ячейками&quot;: ELEM где сам...


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

Или воспользуйтесь поиском по форуму:
Igor3D
938 / 471 / 42
Регистрация: 01.10.2012
Сообщений: 2,331
15.01.2013, 10:24     Сортировка в двунаправленном списке #16
Можно и так (предыдущий вариант)

C++
1
2
3
4
5
template <typename Node>
bool MyComp( Node *n1, Node *n2 )
{
 return n1->data < n2->data;
}
Тогда вызывать так
C++
1
2
// sort
    std::sort(temp, temp + count, MyComp <Node>)
Yandex
Объявления
15.01.2013, 10:24     Сортировка в двунаправленном списке
Ответ Создать тему
Опции темы

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