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

Задания на стеки/очереди (без шаблонных классов stack, queue) - C++

Восстановить пароль Регистрация
 
katkat95
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 11
21.05.2014, 10:55     Задания на стеки/очереди (без шаблонных классов stack, queue) #1
Помогите, пожалуйста. Нужно добавить в очередь нечетные целые числа от -3 до 3. Все числа из очереди извлекать по одному и отрицательные добавлять в стек, положительные выводить на экран. Числа из стека вынимать по одному и печатать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2014, 10:55     Задания на стеки/очереди (без шаблонных классов stack, queue)
Посмотрите здесь:

C++ 4 задания по С++ (Бинарные деревья. Стеки,очереди)
Зачем нужны стеки (STACK) ? C++
C++ Сравнение типов шаблонных классов
queue удаление из очереди C++
C++ Отделить описание шаблонных функций и классов от реализации
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newbie666
21.05.2014, 11:00
  #2

Не по теме:

Цитата Сообщение от katkat95 Посмотреть сообщение
Помогите, пожалуйста.
А чем тебе помочь то? Вопросов никаких нет, проблемного кода тоже ...
Тут можно помочь только командой: ДЕЛАЙ!

katkat95
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 11
21.05.2014, 11:10  [ТС]     Задания на стеки/очереди (без шаблонных классов stack, queue) #3
Проблема в том, что я сама не могу это решить.. вот и прошу помощи
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
21.05.2014, 12:49     Задания на стеки/очереди (без шаблонных классов stack, queue) #4
katkat95, Набросал высоко продуктивный стек (:

katkat95, поигрался немного с copy assignable & move assignable. Тестировал на коде:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <chrono>
 
 
template <typename T>
class stack {
public:
    stack(const size_t& default_capasity = 10)
        : capacity(default_capasity), size(0), a(new T[capacity]) { }
        
    stack(const stack& copy) 
        : capacity(copy.capacity), size(copy.size), a(new T[capacity])
    {
        for (size_t i = 0; i < size; ++i)
            a[i] = copy.a[i];
    }
    
    stack(stack&& local) 
        : capacity(local.capacity), size(local.size), a(local.a) 
    {
        local.a = nullptr;
    }
    
    ~stack() { delete a; }
    
    stack<T>& operator=(const stack<T>& copy) {
        capacity = copy.capacity;
        size = copy.size;
        
        delete a;
        a = new T[capacity];
        for (size_t i = 0; i < size; ++i)
            a[i] = copy.a[i];
        
        return *this;
    }
    
    stack<T>& operator=(stack<T>&& copy) {
        capacity = copy.capacity;
        size = copy.size;
        a = copy.a;
        copy.capacity = copy.size = 0;
        copy.a = nullptr;
        
        return *this;
    }
    
    void push(const T& value) {
        if (size >= capacity)
            resize(capacity * 1.6); 
                
        a[size++] = value;
    }
    
    T pop() {
        if (size < 1)
            throw "stack pop: invalid stack size";
            
        return std::move(a[--size]);
    }
    
    size_t getSize() const { return size; }
 
private:
    void resize(const size_t& value) {
        capacity = value;
        if (size >= capacity) size = capacity; // in case of decreasing 
        
        T* copy = new T[value];
        for (size_t i = 0; i < size; ++i)
            copy[i] = std::move(a[i]); // move assignable
        
        delete a;
        a = copy;
    }
 
    size_t capacity;
    size_t size;
    T* a;   
};
 
stack<int> get() {
    const int n = 100000000; // 400 millions bytes
    stack<int> res(n);
    for (size_t i = 0; i < n; ++i) {
        res.push(i);
    }
    return res;
}
 
int main () {
    stack<int> a = std::move(get()), b, c;
    std::chrono::time_point<std::chrono::system_clock> start, end;
    std::chrono::duration<double> duration;
    
    start = std::chrono::system_clock::now();
    b = a;
    end = std::chrono::system_clock::now();
    duration = end - start;
    std::cout << "Copy: " << duration.count() << '\n';
    
    start = std::chrono::system_clock::now();
    c = std::move(a);
    end = std::chrono::system_clock::now();
    duration = end - start;
    std::cout << "Move: " << duration.count() << '\n';
}

Результат ожидаемый, но все же очень греет душу (:
Bash
1
2
3
4
ruslan@TFTM-K53TA:~/Programming/c++/cyberforum$ make && ./main 
clang++ main.cpp -o main -std=c++11 -W
Copy: 5.00565
Move: 1.132e-06
Копирование 400 миллионов байт обошлось в 5 секундное зависание, а перемещение указателя в 1 микросекунду (:
katkat95
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 11
21.05.2014, 18:37  [ТС]     Задания на стеки/очереди (без шаблонных классов stack, queue) #5
Спасибо большое)) но ведь эта программа не выполняет условие, которое я написала вверху
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
22.05.2014, 03:01     Задания на стеки/очереди (без шаблонных классов stack, queue) #6
katkat95, зато у тебя уже есть стек, осталось написать очередь по примеру стека (:
Yandex
Объявления
22.05.2014, 03:01     Задания на стеки/очереди (без шаблонных классов stack, queue)
Ответ Создать тему
Опции темы

Текущее время: 05:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru