Ребята, помогите разобраться с STL . Про использование vector для int и так далее я разобралась. vector<int> array(arraySize); А что делать если по заданию нужно реализовать через класс. Пробовала использовать свой класс Стек, созданный ранее, но куча ошибок вышло. Причем я очень хорошо понимаю, что например распечатать как я сделала элементы нельзя, но не встречала примера кода именно реализации через классы. | Код | #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
|
| Код | #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;
}
|
|