идиомы С++

_Proxy_

New Member
Прошу помощи людей пишущих на С++ или других языках.
Дело в вот в чем, научится писать правильный код это еще не так проблематично хотя много своих нюансов, но хотелось бы еще научиться писать красивый код, так сказать профессиональность или как-то так)
Вылаживаю гавнокод своей проги, прога небольшая, но я хотел бы узнать что не так хорошо или как нельзя делать сточки зрения хорошего программирования

#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;

}

Что можно почитать по этому поводу с литературы?/
Заранее благодарю)
 
Останнє редагування:
Зверху