Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- template<typename T>
- class line {
- template<typename T>
- class element {
- public:
- T data;
- element<T> *next_element;
- element(T data = T(), element<T> *next_element = nullptr) {
- this->data = data;
- this->next_element = next_element;
- }
- };
- element<T> *first_element;
- unsigned int Size;
- public:
- line() {
- Size = 0;
- first_element = nullptr;
- }
- int size() {
- return Size;
- }
- void push_back(T data) {
- if (first_element == nullptr) {
- first_element = new element<T>(data);
- }
- else {
- element <T> *temp_adress = first_element;
- while (!(temp_adress->next_element == nullptr)) {
- temp_adress = temp_adress->next_element;
- }
- temp_adress->next_element = new element<T>(data);
- }
- Size++;
- }
- T& operator[](const unsigned int index) {
- unsigned int Count = 0;
- element<T> *temp_adress = first_element;
- while (temp_adress->next_element != nullptr) {
- if (Count == index) {
- break;
- }
- temp_adress = temp_adress->next_element;
- Count++;
- }
- return temp_adress->data;
- }
- bool pop_front() {
- if (first_element != nullptr) {
- element<T> *temp_adress = first_element;
- first_element = first_element->next_element;
- delete temp_adress;
- Size--;
- return true;
- }
- else {
- std::cout << "Нечего удалять " << std::endl;
- return false;
- }
- }
- void clear() {
- while (pop_front());
- }
- ~line() {
- clear();
- }
- void push_front(T data) {
- first_element = new element<T>(data, first_element);
- Size++;
- }
- void pop_back() {
- unsigned int Count = 0;
- element<T> *temp_adress = first_element;
- while (Count != Size - 1) {
- temp_adress = temp_adress->next_element;
- Count++;
- }
- delete temp_adress->next_element;
- temp_adress->next_element = nullptr;
- Size--;
- }
- void insert(T data, const int index) {
- if (index == 0) {
- push_front(data);
- }
- else {
- unsigned int Count = 0;
- element<T> *temp_adress = first_element;
- while (Count != index - 1) {
- temp_adress = temp_adress->next_element;
- Count++;
- }
- element<T> *temp_adress_2 = temp_adress->next_element;
- temp_adress->next_element = new element<T>(data);
- temp_adress->next_element->next_element = temp_adress_2;
- Size++;
- }
- }
- void removeAt(const int index) {
- if (index == 0) {
- pop_front();
- }
- else if (index != Size - 1) {
- unsigned int Count = 0;
- element<T> *temp_adress = first_element;
- while (Count != index - 1) {
- temp_adress = temp_adress->next_element;
- }
- element<T> *temp_adress_2 = temp_adress->next_element->next_element;
- delete temp_adress->next_element;
- temp_adress->next_element = temp_adress_2;
- Size--;
- }
- else {
- pop_back();
- }
- }
- };
- int main() {
- setlocale(LC_ALL, "ru");
- line<int> object;
- for (int i = 0; i < 10; i++) {
- object.push_back(i);
- }
- std::cout << "Размер элементов равен " << object.size() << std::endl;
- for (int i = 0; i < object.size(); i++) {
- std::cout << object[i] << " ";
- }
- std::cout << std::endl;
- object.pop_back();
- std::cout << "Размер элементов равен " << object.size() << std::endl;
- for (int i = 0; i < object.size(); i++) {
- std::cout << object[i] << " ";
- }
- std::cout << std::endl;
- object.removeAt(1);
- std::cout << "Размер элементов равен " << object.size() << std::endl;
- for (int i = 0; i < object.size(); i++) {
- std::cout << object[i] << " ";
- }
- std::cout << std::endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment