【C++】listとvectorでstackとqueueを実現!!
1163 ワード
stackの特徴: stackはC++Referenceに5つの関数があり、それぞれempty(),size(),top(),push(),pop()である. stackはデータの出入り時に:先進後出、後進先出である.vectorを利用して中のpushを利用できるようにするback()とpop_back()関数実装.
コードは次のとおりです.
Queueの特徴:
1、queueの特徴は先進先出、後進後出
2、vectorで実現するとpop時にはpop要素の後ろの要素が前に移動する必要があり、効率が悪い.listを用いて実現すれば,要素の移動の問題を完全に回避できる.
コードは次のとおりです.
しかしC++標準ライブラリ内のstackやqueueはvectorやlistで実現されるものではなく,ここでは小編レベルが限られているため一つ一つ実現されない.
コードは次のとおりです.
template>
class Stack
{
public:
Stack()
:s(NULL)
{}
void Push(T d)
{
s.push_back(d);
}
void Pop()
{
if (s.size())
s.pop_back();
}
size_t Size()
{
return s.size();
}
T& Top()
{
return *(s.begin());
}
bool Empty()
{
return s.empty();
}
private:
Stacktype s;
};
Queueの特徴:
1、queueの特徴は先進先出、後進後出
2、vectorで実現するとpop時にはpop要素の後ろの要素が前に移動する必要があり、効率が悪い.listを用いて実現すれば,要素の移動の問題を完全に回避できる.
コードは次のとおりです.
template>
class Queue
{
public:
Queue()
:q(NULL)
{}
void Push(T d)
{
q.push_back(d);
}
void Pop()
{
if (q.size())
q.pop_front();
}
size_t Size()
{
return q.size();
}
bool Empty()
{
return q.empty();
}
T& Front()
{
return *(q.begin());
}
private:
Queuetype q;
};
しかしC++標準ライブラリ内のstackやqueueはvectorやlistで実現されるものではなく,ここでは小編レベルが限られているため一つ一つ実現されない.