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

Стек на основе массива, реализовать функцию resize - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нарушение прав доступа http://www.cyberforum.ru/cpp-beginners/thread1527168.html
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения. //get - seletor, set - modificator, show - вывод #include "stdafx.h" #include <stdio.h> #include <iostream> #include <clocale> #include <string> using namespace std;
C++ Переставить в обратном порядке элементы строк матрицы Привет,народ) Помогите пожалуйста написать код программы на С++, задача такая: Дана матрица размера . Переставить в обратном порядке элементы строк, если их сумма превышает заданное число http://www.cyberforum.ru/cpp-beginners/thread1527162.html
Выбрать все файлы в каталоге C++ WinAPI
Доброго времени суток! Есть заранее определенный каталог, в котором хранятся файлы. Количество их заранее неизвестно, но обработать нужно все. Функция обработки имеет вид function(string fileName), делается это все под виндой. Как можно реализовать такую выборку с дальнейшей передачей в функцию?
C++ Задача на одномерный массив. Найти ошибку
#include <fstream> #include <conio.h> #include <iostream> using namespace std; int fak(int k) { return((k==1)? 1:k*fak(k-1)); }
C++ Как в Code::Blocks сделать визуальное приложение? http://www.cyberforum.ru/cpp-beginners/thread1527152.html
кто-нибудь пользовался code::block? подскажите, как сделать визуальное приложение, чтобы там и окошки были и кнопочки. и я смог бы выбрать что будет при нажатии на ту или иную кнопку. и можно ли такое там забабахать вообще то?? или нужно другую прогу??
C++ Найти сумму чисел стоящих перед первым отрицательным числом последовательности Написать программу, которая находит сумму чисел, которые стоят перед первым отрицательным числом последовательности. подробнее

Показать сообщение отдельно
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
08.09.2015, 22:56     Стек на основе массива, реализовать функцию resize
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
#include <iostream>
 
 
template<typename T>
class Stack {
private:
    T*     arr;
    size_t cnt;
    size_t size;
public:
    Stack(void):arr(NULL), cnt(0), size(16){}
    Stack(const Stack& s):arr(NULL), cnt(0), size(16){
        this->copy(s);
    }
    ~Stack(){
        this->clear();
    }
public:
 
    bool push(const T& val){
        if(this->resize(1)){
            arr[cnt++] = val;
            return true;
        }
        return false;
    }
 
    void copy(const Stack& s){
        if((this != &s) && !s.isEmpty()){
            this->clear();
            if(this->resize(s.cnt)){
                const T* e = s.arr + s.cnt;
                for(const T* p = s.arr; p != e; ++p)
                    this->push(*p);
            }
        }
    }
 
    void pop(void){
        if((cnt > 0) && (--cnt == 0))
            this->clear();
    }
 
    void clear(void){
        if(arr != NULL)
            delete[] arr;
        arr  = NULL;
        cnt  = 0;
        size = 16;
    }
 
    T& top(void){ return arr[cnt - 1]; }
    T& top(void) const { return arr[cnt - 1]; }
 
    bool isEmpty(void) const {
        return (arr == NULL);
    }
 
    size_t getSize(void) const {
        return cnt;
    }
 
    Stack& operator = (const Stack& s){
        this->copy(s);
        return *this;
    }
 
public:
 
    int resize(size_t N){
        if(arr == NULL){
            if(N > size)
                size = N + 1;
            arr = new (std::nothrow) T[size];
            if(arr == NULL)
                return 0;
        } else if((cnt + N) > size){
            T* ptr = new (std::nothrow) T[cnt + N + size];
            if(ptr == NULL)
                return 0;
            for(size_t i = 0; i < cnt; ++i)
                ptr[i] = arr[i];
        
            delete[] arr;
            arr  = ptr;
            size = cnt + N + size;
        }
        return 1;
    }
};
 
 
int main(void) {
    Stack<int> s;
    for(int i = 0; i < 10; ++i)
        s.push(i);
 
    while(! s.isEmpty()){
        std::cout << s.top() << ' ';
        s.pop();
    }
    return 0;
}
Пример работы кода
 
Текущее время: 12:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru