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

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

Войти
Регистрация
Восстановить пароль
 
rostykm
2 / 2 / 0
Регистрация: 30.03.2011
Сообщений: 34
#1

STL - C++

18.04.2012, 21:07. Просмотров 663. Ответов 3
Метки нет (Все метки)

Добрый вечер всем кто открыл эту вкладку!
Надо реализовать кольцевой упорядоченный двозвязний список на 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
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <list>
#include <ctime>
 
using namespace std;
 
list<int> l;
list<int>::iterator it = l.begin();
list<int>::iterator ite = l.end();
bool flag = false;
 
void initialization()
{
    for (int i = 0; i < 10; i++)
        l.push_back(i);
}
 
void insert(int n)
{
    for (it=l.begin(); it!=l.end(); it++)
        if (*it > n)
        {
            l.insert(it, n);
            flag = true;
            break;
        }
    if (!flag)
        l.push_back(n);
}
 
void mydelete (int n)
{
    for (it=l.begin(); it != l.end(); it++)
        if (*it == n)
            it = l.erase(it);
}
 
void print()
{
    cout << "List ->";
    for (it=l.begin(); it!=l.end(); it++)
        cout << "  " << *it;
    cout << endl;
}
 
void size()
{
    cout << "Size ->  " << l.size() << endl;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    initialization();
    print();
    
    mydelete(4);
    print();
 
    insert(100);
    print();
 
    size();
    
    cout << "Time of working program - " << (double)clock()/CLOCKS_PER_SEC << " seconds " <<endl;
    system("pause");
    
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 21:07     STL
Посмотрите здесь:

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

Шаблоны STL - C++
Здраствуйте. У меня задача такая: робота со стандарными шаблонами. Мне нужно заполнить контейнер пользовательским типом даных, тоесть ...

STL и поток - C++
Есть вектор, объявленный в основной программе, состоящий из ссылок на компоненты типа TImage и TCheckBox: struct mass { TImage *img; ...

Поиск в STL - C++
Здравствуйте) Вот пытаюсь совершить поиск в контейнере вектор спомощью find. Написал функтор, ищу ну что-то наверное неправильно. Не...

библиотека STL - C++
Подскажите где можно почитать про библиотеку STL. Говорю сразу с английским не дружу((

STL и string - C++
начал тут 1 задачу на форуме решать в text1 какой-то текст, мы ищем в нем слова str и после них вставляем слова str2 вообщем я не...

stl map - C++
где можно прочитать о stl map? подскажите книги..

stl в VS 2008 - C++
vector &lt;int&gt; size; deque &lt;int&gt; COUNTER; вылазиют ошибки синтаксическая ошибка: отсутствие &quot;;&quot; перед &quot;&lt;&quot; отсутствует спецификатор...

STL. Полиномы - C++
Каким образом можно представить полиномы с помощью STL? Первый раз сталкиваюсь, подскажите, пожалуйста! Добавлено через 15 минут ...

STL списки - C++
Какие собственно плюсы и минусы у STL списков в сравнении с обычными списками.......Чем бы вы рекомендовали пользоваться?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
19.04.2012, 10:00     STL #2
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
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
 
namespace simple
{
 
template<class T>
class list
{
public:
   typedef typename std::list<T>::iterator iterator;
   typedef typename std::list<T>::const_iterator const_iterator;
 
   list():container()
   {
   }
   list(const std::initializer_list<T>& args):container(args)
   {
   }
   void insert(const T& value)
   {
      if (!container.empty())
      {
         auto up_bound = std::upper_bound(container.begin(), container.end(), value);
         if (up_bound != container.end())
         {
            container.insert(up_bound, value);
         }
         else
         {
            container.push_back(value);
         }
      }
      else
      {
         container.push_back(value);
      }
   }
   void erase(const T& value)
   {
      auto iter = std::find(container.begin(), container.end(), value);
      if (iter != container.end())
      {
         container.erase(iter);
      }
   }
   iterator begin() { return container.begin(); }
   iterator end() { return begin(); }
   const_iterator begin() const { return container.cbegin(); }
   const_iterator end() const { return begin(); }
private:
   template<class T2>
   friend std::ostream& operator << (std::ostream&, const list<T2>&);
   std::list<T> container;
};
 
template<class T>
std::ostream& operator << (std::ostream& os, const list<T>& lst)
{
   std::copy(lst.container.begin(), lst.container.end(), std::ostream_iterator<T>(os, "\n"));
   return os;
}
 
}
 
int main()
{
   simple::list<int> lst;
   lst.insert(10);
   lst.insert(9);
   lst.insert(8);
   lst.insert(20);
   lst.insert(5);
   std::cout << lst;
   lst.erase(8);
   lst.erase(5);
   std::cout << "after erase" << std::endl;
   std::cout << lst;
}
Кроме кольца. Насколько я понимаю для правильной закольцованности списка придется переопределять итераторы.

Добавлено через 56 секунд
http://liveworkspace.org/code/75084c...60eb36a16ebd75
rostykm
2 / 2 / 0
Регистрация: 30.03.2011
Сообщений: 34
19.04.2012, 14:50  [ТС]     STL #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Кроме кольца.
Добавлено через 56 секунд
в этом весь прикол
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
19.04.2012, 15:24     STL #4
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
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
 
namespace simple
{
 
template<class T>
class list
{
private:
   template<class Container>
   class circle_iterator
   {
   public:
      circle_iterator(Container& cont, typename Container::iterator iter):
         cont_(cont), current(iter)
      {
      }
      circle_iterator& operator ++()
      {
         ++current;
         if (current == cont_.end())
         {
            current = cont_.begin();
         }
         return *this;
      }
      circle_iterator operator ++(int)
      {
         circle_iterator tmp(*this);
         this->operator ++();
         return tmp;
      }
      circle_iterator operator --()
      {
         if (current == cont_.begin())
         {
            std::advance(current, cont_.size() - 1);
         }
         else
         {
            --current;
         }
         return *this;
      }
      circle_iterator operator --(int)
      {
         circle_iterator tmp(*this);
         this->operator --();
         return tmp;
      }
      typename Container::value_type& operator *()
      {
         return *current;
      }
      typename Container::pointer operator ->()
      {
         return &(*current);
      }
   private:
      Container& cont_;
      typename Container::iterator current;
   };
public:
   typedef circle_iterator<std::list<T> > iterator;
   typedef iterator const_iterator;
 
   list():container()
   {
   }
   list(const std::initializer_list<T>& args):container(args)
   {
   }
   void insert(const T& value)
   {
      if (!container.empty())
      {
         auto up_bound = std::upper_bound(container.begin(), container.end(), value);
         if (up_bound != container.end())
         {
            container.insert(up_bound, value);
         }
         else
         {
            container.push_back(value);
         }
      }
      else
      {
         container.push_back(value);
      }
   }
   void erase(const T& value)
   {
      auto iter = std::find(container.begin(), container.end(), value);
      if (iter != container.end())
      {
         container.erase(iter);
      }
   }
   iterator begin() { return iterator(container, container.begin()); }
   //iterator end() { return iterator(container, container.end()); }
   //const_iterator begin() const { return container.cbegin(); }
   //const_iterator end() const { return begin(); }
private:
   template<class T2>
   friend std::ostream& operator << (std::ostream&, const list<T2>&);
   std::list<T> container;
};
 
template<class T>
std::ostream& operator << (std::ostream& os, const list<T>& lst)
{
   std::copy(lst.container.begin(), lst.container.end(), std::ostream_iterator<T>(os, "\n"));
   return os;
}
 
}
 
int main()
{
   simple::list<int> lst;
   lst.insert(10);
   lst.insert(9);
   lst.insert(8);
   lst.insert(20);
   lst.insert(5);
   std::cout << lst;
   lst.erase(8);
   lst.erase(5);
   std::cout << "after erase" << std::endl;
   std::cout << lst;
   int cnt = 10;
   int current = 0;
   std::cout << "List" << std::endl;
   for (simple::list<int>::iterator iter = lst.begin(); current != cnt; ++current, ++iter)
   {
      std::cout << *iter << std::endl;
   }
}
http://liveworkspace.org/code/9c91d4...e505f20410b10a

Остальное сам.
Yandex
Объявления
19.04.2012, 15:24     STL
Ответ Создать тему
Опции темы

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