Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 2
Регистрация: 12.04.2014
Сообщений: 102
1

Реализовать возможности контейнера vector используя класс стек

10.06.2015, 07:19. Просмотров 958. Ответов 2
Метки нет (Все метки)

Ребята, помогите разобраться с STL . Про использование vector для int и так далее я разобралась.
vector<int> array(arraySize);
А что делать если по заданию нужно реализовать через класс. Пробовала использовать свой класс Стек, созданный ранее, но куча ошибок вышло.
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
#pragma once
#ifndef STACK_H
#define STACK_H
#include <iomanip>
#include <exception>
 
 
 
class Stack
{
private:
    int *s_stackPtr; 
    size_t s_size; 
    size_t top; 
public:
    Stack(size_t);
    ~Stack(); 
    Stack(const Stack &); 
    Stack& operator=(const Stack& ob);    
    bool push(const int&  );
    bool pop();  
    void printStack();
    //friend std::ostream &operator<< (std::ostream &output, const Stack  <T> &obj);
};
 
Stack::Stack(size_t maxSize) 
{ 
    if(maxSize > 6)
        throw std::exception ("'maxSize' is invalid.");
 
    s_size = maxSize;   
    s_stackPtr = new int[s_size]; 
    
    for(int ix = 0; ix < s_size; ix++)
        s_stackPtr[ix] = 0;
    
    top = -1; // стек пуст
}
 
Stack::~Stack()
{
    delete [] s_stackPtr; 
}
 
Stack::Stack(const Stack &ob) 
{ 
    s_size = ob.s_size; 
    s_stackPtr = new int[s_size]; 
    top = ob.top;
    for(int ix = 0; ix < s_size; ix++)
        s_stackPtr[ix] = ob.s_stackPtr[ix];
}  
 
Stack &Stack:: operator=(const Stack& ob)
{  
    if (this != &ob) 
    {  
        delete s_stackPtr;
        s_stackPtr = new int[s_size= ob.s_size];
        top = ob.top;
        for(int ix = 0; ix < top+3; ix++)
            s_stackPtr[ix] = ob.s_stackPtr[ix];
    }
    return *this;
}
 
bool Stack::push(const int& value) 
{
    if (top == s_size-1) 
        return false;
    top++;
    s_stackPtr[top] = value; 
    return true; 
}
 
bool Stack::pop()
{
    if (top == -1) return false; // стек пуст
    s_stackPtr[top] = 0; 
    top--;
    return true; 
}
 
void Stack::printStack() 
{
    for (int ix = s_size-1; ix >= 0; ix--)
        std::cout << "|" << std::setw(4) << s_stackPtr[ix] << std::endl;
}
 
 
 
#endif



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
#include <iostream>
#include <Windows.h>
#include <iomanip>
#include "Stack.h"
#include <exception>
#include <vector>
#include <iterator>
 
 
 
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    try{
     size_t maxSize = 0;
    std::cout << "Введите размер стека,но не больше 5: ";
    std::cin >> maxSize;
    std::vector<Stack> myStack1(maxSize);
    std::cout << "Введите элементы массива: ";
    for(int i = 0; i < myStack1.size(); i++) {
        std::cin >> myStack1[i];
    }
 
    std::cout << "\nВведенный массив: ";
    if (!myStack1.empty()) { // если массив не пуст
        // вывод на экран элементов массива
        copy( myStack1.begin(), myStack1.end(), ostream_iterator<Stack>(std::cout," ") );
    }
    std::cout << "\nКоличество элементов массива: " << myStack1.size();
 
   std:: vector<Stack> myStack2= myStack1;// присвоил все элементы array массиву array2
    std::cout << "\nЭлементы второго массива (скопированы из первого): ";
    std::copy( myStack2.begin(), myStack2.end(), ostream_iterator<Stack>(std::cout," ") );
 
   std:: cout << "\nПервый элемент массива array2: " << myStack2.front() << std::endl;
    std::cout << "Последний элемент массива array2: " << myStack2.back() << std::endl;
 
    myStack1.clear(); // удалим все элементы массива, array теперь пуст
    myStack2.push_back(999);  // в конец массива array2 добавили новый элемент (-11)
 
    std::cout << "Массив array2 с новым последним элементом: ";
    std::copy( myStack2.begin(), myStack2.end(), ostream_iterator<Stack>(std::cout," ");
    //Stack <int> myStack1(5);
    //Stack <int> myStack2(5);
    /*std::cout << "Заталкиваем элементы в стек: "<< std::endl;// заполняем стек
    myStack1.printStack(); 
    int ct = 0;
    while (ct++ != 5)
    {
        int temp;
        std::cin >> temp;
        myStack1.push(temp);
    }
 
    //std::cout << myStack;
    myStack1.printStack(); 
    std::cout << "\nУдаляем два элемента из стека:\n";
    myStack1.pop(); 
    myStack1.pop(); 
    //std::cout << myStack;
    myStack1.printStack();
    myStack2=myStack1;
    myStack2.printStack();*/
    }catch (const std::exception& exception)
    {
        std::cerr<<"Ошибка:"<<exception.what()<<"\n";
        return 1;
    }
 
    system("pause");
    return 0;
 
}


Причем я очень хорошо понимаю, что например распечатать как я сделала элементы нельзя, но не встречала примера кода именно реализации через классы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2015, 07:19
Ответы с готовыми решениями:

Реализовать класс, как у Праты, используя string и vector
Всем привет! У Праты в главе &quot;Классы и динамическое выделение памяти&quot; есть следующий...

Создать стек на основе контейнера vector
На основе контейнера vector построить стек целых чисел. Выполнить операции занесения элемента в...

Реализовать класс Vector (конструктор, интерфейс)
Добрый день. Нужна небольшая помощь (проверка) в редактировании (исправлении) кода. Задание - В...

Используя графические возможности языка C, реализовать экранную заставку с предложенным видеоэффектом
Используя графические возможности языка C, реализовать экранную заставку с предложенным...

2
Don't worry, be happy
16921 / 9797 / 1887
Регистрация: 27.09.2012
Сообщений: 24,296
Записей в блоге: 2
10.06.2015, 07:39 2
реализовать возможности контейнера vector используя класс стек
Одно другому противоречит.
Это будет самая ущербная хрень в мире
0
2 / 2 / 2
Регистрация: 12.04.2014
Сообщений: 102
10.06.2015, 08:23  [ТС] 3
А что лучше тогда? Через какой класс? Сам класс вектор создать?

Добавлено через 37 минут
убрала все кроме и оставила как в примере было. Может класс Вектор больше подходит? Вот после того, как я сделаю класс Вектор, что нужно поменять в коде?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2015, 08:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Создать класс Vector – вектор, используя динамическую память
Может кто подскажет листинг этой программы???

Создать класс Vector – вектор, используя динамическую память
Создать класс Vector – вектор, используя динамическую память. Определить операторы &quot;+&quot; –...

Используя стек реализовать обратную польскую запись
Используя стек реализовать обратную польскую запись.​ ОПЗ -​ форма записи математических и...

Создать шаблонный класс - ассоциативный массив, используя std::vector
Задание выглядит так: &quot;Создать шаблонный класс – ассоциативный массив mymap с использованием...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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