Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- template<class T>
- class container {
- protected:
- unsigned int SIZE;
- public:
- container() : SIZE(0) { /* ... */ }
- virtual T operator[](unsigned int) =0;
- virtual void push_back(const T&) =0;
- unsigned int size() { return SIZE; }
- };
- ///////////////////////////////////////////////////////////
- template<class T>
- struct link {
- link<T>* next = NULL;
- T value;
- };
- template<class T>
- class my_list : public container<T> {
- protected:
- link<T>* FIRST;
- link<T>* LAST;
- public:
- my_list() : container<T>(), FIRST(NULL), LAST(NULL) { /* ... */ }
- T operator[](unsigned int index) {
- if (index >= container<T>::SIZE) {
- throw string (
- "Невалидный индекс для данного контейнера"
- );
- }
- link<T>* cur_link = FIRST;
- while (index--) {
- cur_link = cur_link -> next;
- }
- return cur_link -> value;
- }
- void push_back(const T& value) {
- // Проверка на одинаковые элементы
- for (int i = 0; container<T>::SIZE > i; i++) {
- if ((*this)[i] == value) {
- throw string (
- "Одинаковое значение"
- );
- }
- }
- link<T>* NEW_LINK = new link<T>();
- NEW_LINK -> value = value;
- // Если нет элементов
- if (container<T>::SIZE == 0) {
- FIRST = NEW_LINK;
- LAST = NEW_LINK;
- } else
- // Если первый элемент больше
- if (FIRST -> value > value) {
- NEW_LINK -> next = FIRST;
- FIRST = NEW_LINK;
- } else
- // Если последний элемент меньше
- if (LAST -> value < value) {
- LAST -> next = NEW_LINK;
- LAST = NEW_LINK;
- }
- // ЕСЛИ ДВА И БОЛЬШЕ
- else {
- link<T>* cur_link = FIRST;
- while ((cur_link -> next -> value) > value) {
- cur_link = cur_link -> next;
- }
- NEW_LINK -> next = cur_link -> next;
- cur_link -> next = NEW_LINK;
- }
- container<T>::SIZE++;
- }
- };
- ///////////////////////////////////////////////////////////
- int main() {
- my_list<int> test_list;
- try {
- unsigned int size_list;
- cout << "Выберите размер для контейнера типа forward_list: ";
- cin >> size_list;
- for (int i = 0; size_list > i; i++) {
- cout << "Введите значение для вставки в контейнер: ";
- int value; cin >> value;
- test_list.push_back(value);
- }
- for (unsigned int i = 0; test_list.size() > i; i++) {
- cout << "test_list[" << i << "]: " << test_list[i] << endl;
- }
- unsigned int index;
- if (test_list.size()) {
- cout << "Выберите индекс для отображения в контейнере: ";
- cin >> index;
- cout << "test_list[" << index << "]: " << test_list[index] << endl;
- }
- }
- catch(string err) {
- cout << "Ошибка: " << err << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement