Ребята, помогите разобраться с 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;
} |
|
Причем я очень хорошо понимаю, что например распечатать как я сделала элементы нельзя, но не встречала примера кода именно реализации через классы.