Прошу помощи людей пишущих на С++ или других языках.
Дело в вот в чем, научится писать правильный код это еще не так проблематично хотя много своих нюансов, но хотелось бы еще научиться писать красивый код, так сказать профессиональность или как-то так)
Вылаживаю гавнокод своей проги, прога небольшая, но я хотел бы узнать что не так хорошо или как нельзя делать сточки зрения хорошего программирования
#include <iostream>
class out_of_range : public std::exception {
public:
out_of_range() { }
};
template<class Node, class T>
class iterator {
private:
Node *current;
public:
iterator(Node *node):current(node) { }
void operator++() {
if(!current)
throw new out_of_range();
current = current->getNext();
}
bool operator == (iterator const &other) {
return current == other.current;
}
bool operator !=(iterator const &other) {
return current != other.current;
}
Node* operator->() {
return current;
}
};
template<class T>
class node {
private:
T value;
node *next;
node *prev;
public:
node(T value) {
next = NULL;
this->value = value;
}
node* getNext() {
return next;
}
void setNext(node *n) {
next = n;
}
T getValue() {
return value;
}
};
template<class T>
class list {
public:
typedef iterator<node<T>, T> iterator;
private:
node<T> *root;
public:
list():root(NULL) { };
void push_back(T value) {
if(root) {
node<T> *temp = root;
while(temp->getNext()) {
temp = temp->getNext();
}
temp->setNext(new node<T>(value));
}else {
root = new node<T>(value);
}
}
T pop_back() {
if(!root)
throw new out_of_range();
if(!root->getNext()) {
T value = root->getValue();
delete root;
root = NULL;
return value;
} else {
node<T> *temp = root;
while(temp->getNext()) {
temp = temp->getNext();
}
node<T> *del = temp;
temp = root;
while( temp->getNext() != del) {
temp = temp->getNext();
}
T value = del->getValue();
temp->setNext(NULL);
delete del;
return value;
}
}
iterator begin() {
return iterator(root);
}
iterator end() {
return iterator(NULL);
}
~list() {
while(root) {
node<T> *del = root;
root = root->getNext();
delete del;
}
}
};
void main() {
list<int> integer;
integer.push_back(1);
integer.push_back(1);
integer.push_back(2);
integer.push_back(3);
std::cout << integer.pop_back() << std::endl;
std::cout << integer.pop_back() << std::endl;
std::cout << integer.pop_back() << std::endl;
std::cout << integer.pop_back() << std::endl;
integer.push_back(5);
integer.push_back(6);
integer.push_back(7);
integer.push_back(8);
for(list<int>::iterator it = integer.begin(); it != integer.end(); it++)
std::cout << it->getValue() << std::endl;
}
Что можно почитать по этому поводу с литературы?/
Заранее благодарю)
Дело в вот в чем, научится писать правильный код это еще не так проблематично хотя много своих нюансов, но хотелось бы еще научиться писать красивый код, так сказать профессиональность или как-то так)
Вылаживаю гавнокод своей проги, прога небольшая, но я хотел бы узнать что не так хорошо или как нельзя делать сточки зрения хорошего программирования
#include <iostream>
class out_of_range : public std::exception {
public:
out_of_range() { }
};
template<class Node, class T>
class iterator {
private:
Node *current;
public:
iterator(Node *node):current(node) { }
void operator++() {
if(!current)
throw new out_of_range();
current = current->getNext();
}
bool operator == (iterator const &other) {
return current == other.current;
}
bool operator !=(iterator const &other) {
return current != other.current;
}
Node* operator->() {
return current;
}
};
template<class T>
class node {
private:
T value;
node *next;
node *prev;
public:
node(T value) {
next = NULL;
this->value = value;
}
node* getNext() {
return next;
}
void setNext(node *n) {
next = n;
}
T getValue() {
return value;
}
};
template<class T>
class list {
public:
typedef iterator<node<T>, T> iterator;
private:
node<T> *root;
public:
list():root(NULL) { };
void push_back(T value) {
if(root) {
node<T> *temp = root;
while(temp->getNext()) {
temp = temp->getNext();
}
temp->setNext(new node<T>(value));
}else {
root = new node<T>(value);
}
}
T pop_back() {
if(!root)
throw new out_of_range();
if(!root->getNext()) {
T value = root->getValue();
delete root;
root = NULL;
return value;
} else {
node<T> *temp = root;
while(temp->getNext()) {
temp = temp->getNext();
}
node<T> *del = temp;
temp = root;
while( temp->getNext() != del) {
temp = temp->getNext();
}
T value = del->getValue();
temp->setNext(NULL);
delete del;
return value;
}
}
iterator begin() {
return iterator(root);
}
iterator end() {
return iterator(NULL);
}
~list() {
while(root) {
node<T> *del = root;
root = root->getNext();
delete del;
}
}
};
void main() {
list<int> integer;
integer.push_back(1);
integer.push_back(1);
integer.push_back(2);
integer.push_back(3);
std::cout << integer.pop_back() << std::endl;
std::cout << integer.pop_back() << std::endl;
std::cout << integer.pop_back() << std::endl;
std::cout << integer.pop_back() << std::endl;
integer.push_back(5);
integer.push_back(6);
integer.push_back(7);
integer.push_back(8);
for(list<int>::iterator it = integer.begin(); it != integer.end(); it++)
std::cout << it->getValue() << std::endl;
}
Что можно почитать по этому поводу с литературы?/
Заранее благодарю)
Останнє редагування: