worked some more on list
This commit is contained in:
parent
3eabc872d4
commit
484ed2cae5
1
.gitignore
vendored
1
.gitignore
vendored
@ -43,3 +43,4 @@ gmon\.out
|
|||||||
*.exe
|
*.exe
|
||||||
*.out
|
*.out
|
||||||
*.app
|
*.app
|
||||||
|
debug/*
|
||||||
|
68
src/list.hh
68
src/list.hh
@ -205,6 +205,8 @@ public:
|
|||||||
// Modifiers //
|
// Modifiers //
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// clear ////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
cell *it = sentry->n;
|
cell *it = sentry->n;
|
||||||
while (it != sentry) {
|
while (it != sentry) {
|
||||||
@ -214,6 +216,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// insert ///////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
iterator insert(const_iterator pos, const T &value) {
|
iterator insert(const_iterator pos, const T &value) {
|
||||||
cell *elem = new cell{value};
|
cell *elem = new cell{value};
|
||||||
elem->n = pos;
|
elem->n = pos;
|
||||||
@ -239,7 +243,62 @@ public:
|
|||||||
return iterator{pos};
|
return iterator{pos};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// emplace //////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class... Args>
|
||||||
|
iterator emplace(const_iterator pos, Args&&... args) {
|
||||||
|
return insert(pos, T{std::forward<Args>(args)...});
|
||||||
|
}
|
||||||
|
|
||||||
|
// erase ////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
iterator erase(const_iterator pos) {
|
||||||
|
pos->p->n = pos->n;
|
||||||
|
pos->n->p = pos->p;
|
||||||
|
pos->n = nullptr;
|
||||||
|
pos->p = nullptr;
|
||||||
|
cell* todel = pos;
|
||||||
|
++pos;
|
||||||
|
delete todel;
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
iterator erase(const_iterator begin, const_iterator end) {
|
||||||
|
while(begin != end) {
|
||||||
|
begin = erase(begin);
|
||||||
|
}
|
||||||
|
return begin;
|
||||||
|
}
|
||||||
|
|
||||||
|
// push_back ////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void push_back(const T &v) {
|
||||||
|
cell *c = new cell;
|
||||||
|
c->x = v;
|
||||||
|
c->p = sentry->p;
|
||||||
|
c->n = sentry;
|
||||||
|
sentry->p->n = c;
|
||||||
|
sentry->p = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void push_back(T&& v) {
|
||||||
|
cell *c = new cell;
|
||||||
|
std::swap(c->x, v);
|
||||||
|
c->p = sentry->p;
|
||||||
|
c->n = sentry;
|
||||||
|
sentry->p->n = c;
|
||||||
|
sentry->p = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
// emplace_back /////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class... Args>
|
||||||
|
T& emplace_back(Args&&... args) {
|
||||||
|
emplace(begin(), args...);
|
||||||
|
return *begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
// pop_back /////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool empty() { return sentry->p == sentry; }
|
bool empty() { return sentry->p == sentry; }
|
||||||
|
|
||||||
@ -252,15 +311,6 @@ public:
|
|||||||
sentry->n = c;
|
sentry->n = c;
|
||||||
}
|
}
|
||||||
|
|
||||||
void push_back(const T &v) {
|
|
||||||
cell *c = new cell;
|
|
||||||
c->x = v;
|
|
||||||
c->p = sentry->p;
|
|
||||||
c->n = sentry;
|
|
||||||
sentry->p->n = c;
|
|
||||||
sentry->p = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pop_front() {
|
void pop_front() {
|
||||||
cell *c = sentry->n;
|
cell *c = sentry->n;
|
||||||
sentry->n = c->n;
|
sentry->n = c->n;
|
||||||
|
Loading…
Reference in New Issue
Block a user