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

Реализация кольцевого списка на СТЛ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Комплексные числа http://www.cyberforum.ru/cpp-beginners/thread727578.html
Никогда не работал в c++ с комплексными числами. Вот программа которую нужно осуществить, но я не знаю как, если не трудно подскажите! #include "stdafx.h" #include "iostream" #include <complex> using namespace std; int main() {
C++ Реализация полиморфизма Читал что существует примерно 10 способов реализации полиморфного контейнера. Видел только один где создается виртуальный класс и у него наслебуются другие классы. а как еще можно сделать полиморфизм? Код и ссылки где почитать пожалуйста покидайте. http://www.cyberforum.ru/cpp-beginners/thread727576.html
C++ Составить одномерный массив B из номеров строк двумерного массива, в которых есть хотя бы одно нечетное число
Здравствуйте, помогите написать программу, условие задачи: Дан двумерный целочисленный массив A(M,N). Составить одномерный массив B из номеров строк этого массива, в которых есть хотя бы одно нечетное число.
C++ Как будет ИЛИ
Извиняюсь, за столь простой вопрос, но нигде не могу найти как будет "ИЛИ" на C++.
C++ Найти матрицу, получающуюся перестановкой столбцов, используя указатель http://www.cyberforum.ru/cpp-beginners/thread727533.html
Дана целочисленная матрица размера m х n. Найти матрицу, получающуюся перестановкой столбцов (первого с последним, второго с предпоследним и т.д.). Используя указатель. Помогите, не как не пойму как с этим указателем делать... Добавлено через 2 часа 46 минут up up
C++ Матрицу K(m, n) заполнить следующим образом Матрицу K(m, n) заполнить следующим образом. Элементам, находящимся на периферии (по периметру матрицы), присвоить значение 1; периметру оставшейся подматрицы - значение 2 и так далее до заполнения всей матрицы. Нужен код программы с комментариями. подробнее

Показать сообщение отдельно
Equality
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 4
11.12.2012, 16:48     Реализация кольцевого списка на СТЛ
Добрый день! Появилось несколько вопросов в ходе выполнения задания.
Само задание звучит так:
Код
Реализовать шаблон контейнерного класса "кольцо", который был бы построен на базе одного из стандартных последовательных контейнеров STL и характеризовался таким поведением: возможностью циклического перемещения "головы", возможностью прохода в двух направлениях, поиска элементов по значению, вклеивания и удаление групп элементов, сравнение двух колец. Исключительная ситуация - отсутствие ссылок на "голову" (у одного из элементов кольца).
Пока стараюсь написать это не как шаблон, а в мэйне. Вот мой корявый код, что пока есть:

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
#include <iostream>
#include <list>
#include <algorithm>
#include <locale.h>
 
using namespace std;
 
void print(int i) 
{ 
    cout<< i << endl; 
}
 
int main()
{
setlocale (LC_CTYPE, "russian");
int n=0, n1=0, finder;
list<int> L;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Введите количество элементов в цикличном списке:"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cin>>n;
cout<<endl;
int k=n;
 
while(n1!=n)
{
    n1++;
    L.push_front(rand()%100000);
}
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Рандомной сформированный список в пределах от 0 до 100 000:"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
    
L.begin()=L.end();
 
list<int>::iterator i;
for_each(L.begin(), L.end(), print);
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Введите значение искомого элемента:"<<endl;
cin>>finder;
cout<<"-------------------------------------------------------------------------------"<<endl;
for(i=L.begin(); i != L.end(); ++i) 
    {
            int c = distance(L.begin(), i);          
            if (finder==*i)
                {
                    cout<<"Поиск успешен! Искомый элемент "<<*i<<" - "<<c+1<<" в списке "<<endl;
                }
            else
                {
                    cout<<"Ошибка! Элемент №"<<c+1<<" - Не соответствует искомому."<<endl;
                }
    }
int a=0, a1=0, z=0;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Добавление элемента в список"<<endl;
cout<<"Введите количество элементов, которые хотите добавить:"<<endl;
cin>>a;
cout<<"-------------------------------------------------------------------------------"<<endl;
char choice;
    for (;;){
        do {
        cout<<"Куда Вы хотите добавить элемент?\n\n\n"<<endl;
        cout<<"0 - В начало списка\n\n"<<endl;
        cout<<"1 - В конец списка\n\n"<<endl;
        cout<<"q - Выход из раздела добавления элементов\n\n\n"<<endl;
        cin>>choice;
        } while ( choice < '0' || choice > '1' && choice != 'q');
    if (choice == 'q') break;
           switch (choice) {
               case '0':
                        while (a!=a1)
                        {
                            a1++;
                            cout<<"\nВведите элемент №"<<a1<<" для добавления в начало списка;"<<endl;
                            cin>>z;
                            cout<<"\n\n";
                            L.push_front(z);
                        }
                        for_each(L.begin(), L.end(), print);
                    break;
               case '1':
                        while (a!=a1)
                        {
                            a1++;
                            cout<<"\nВведите элемент №"<<a1<<" для добавления в начало списка;"<<endl;
                            cin>>z;
                            cout<<"\n\n";
                            L.push_back(z);
                        }
                        for_each(L.begin(), L.end(), print);
                    break;
           }
    }
 
a=0, a1=0, z=0;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Удаление элементов из списка"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
    for(i=L.begin(); i != L.end(); ++i) 
        {
            int c = distance(L.begin(), i);          
            cout<<"№"<<c+1<<". "<<*i<<endl;
        }
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Введите количество элементов, которые хотите удалить:"<<endl;
cin>>a;
cout<<"-------------------------------------------------------------------------------"<<endl;
    while (a!=a1)
                        {
                            a1++;
                            cout<<"\nВведите элемент для удаления:"<<endl;
                            cin>>z;
                            cout<<"\n\n";
                            L.remove(z);
                        }
    for_each(L.begin(), L.end(), print);
cout<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Перемещение элементов:"<<endl;
cout<<"-------------------------------------------------------------------------------"<<endl;
a=0, a1=0, z=0;
    for(i=L.begin(); i != L.end(); ++i) 
        {
            int c = distance(L.begin(), i);          
            cout<<"№"<<c+1<<". "<<*i<<endl;
        }
/*cout<<"-------------------------------------------------------------------------------"<<endl;
cout<<"Циклическое перемещение головы"<<endl;
cout<<"Введите перемещаемый элемент:"<<endl;
cin >>z;
cout<<endl;
cout<<"Введите на каком месте должен быть элемент:"<<endl;
cin >>a;
cout<<endl;
    list<int>::iterator last, first, pos = L.begin();
    if( *pos == z )
         *pos++;
    for(list<int>::iterator i = pos; i != L.end(); *i++) 
    {
          if(*i == z ) 
            {
                  for(last = i, first = --i; 1; --last) 
                  {
                        swap(*last, *first);
                        if(first == pos)
                               break;
                         --first;
                   }
                   *pos++;
           }
      }*/
    for_each(L.begin(), L.end(), print);
 
return 0;
}
Собственно вопрос, как сделать список цикличным? Сомневаюсь, что
C++
1
L.begin()=L.end();
- правильный вариант.

И как реализовать возможность циклического перемещения "головы" ?
И вообще, я на правильном пути? Или весь мой код - тотальный бред? Буду благодарен за любые ответы и критику.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru