57 #define _STL_STACK_H 1 61 #if __cplusplus >= 201103L 62 # include <bits/uses_allocator.h> 65 namespace std _GLIBCXX_VISIBILITY(default)
67 _GLIBCXX_BEGIN_NAMESPACE_VERSION
98 template<
typename _Tp,
typename _Sequence = deque<_Tp> >
102 typedef typename _Sequence::value_type _Sequence_value_type;
103 #if __cplusplus < 201103L 104 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
105 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
107 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
109 template<
typename _Tp1,
typename _Seq1>
113 template<
typename _Tp1,
typename _Seq1>
117 #if __cplusplus >= 201103L 118 template<
typename _Alloc>
119 using _Uses =
typename 120 enable_if<uses_allocator<_Sequence, _Alloc>::value>::type;
124 typedef typename _Sequence::value_type value_type;
125 typedef typename _Sequence::reference reference;
126 typedef typename _Sequence::const_reference const_reference;
127 typedef typename _Sequence::size_type size_type;
128 typedef _Sequence container_type;
139 #if __cplusplus < 201103L 141 stack(
const _Sequence& __c = _Sequence())
144 template<
typename _Seq = _Sequence,
typename _Requires =
typename 145 enable_if<is_default_constructible<_Seq>::value>::type>
150 stack(
const _Sequence& __c)
154 stack(_Sequence&& __c)
155 : c(std::move(__c)) { }
157 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
159 stack(
const _Alloc& __a)
162 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
163 stack(
const _Sequence& __c,
const _Alloc& __a)
166 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
167 stack(_Sequence&& __c,
const _Alloc& __a)
168 : c(std::move(__c), __a) { }
170 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
174 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
176 : c(std::move(__q.c), __a) { }
184 {
return c.empty(); }
198 __glibcxx_requires_nonempty();
209 __glibcxx_requires_nonempty();
224 { c.push_back(__x); }
226 #if __cplusplus >= 201103L 228 push(value_type&& __x)
229 { c.push_back(std::move(__x)); }
231 #if __cplusplus > 201402L 232 template<
typename... _Args>
234 emplace(_Args&&... __args)
235 {
return c.emplace_back(std::forward<_Args>(__args)...); }
237 template<
typename... _Args>
239 emplace(_Args&&... __args)
240 { c.emplace_back(std::forward<_Args>(__args)...); }
258 __glibcxx_requires_nonempty();
262 #if __cplusplus >= 201103L 265 #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 266 noexcept(__is_nothrow_swappable<_Sequence>::value)
268 noexcept(__is_nothrow_swappable<_Tp>::value)
274 #endif // __cplusplus >= 201103L 289 template<
typename _Tp,
typename _Seq>
292 {
return __x.c == __y.c; }
307 template<
typename _Tp,
typename _Seq>
310 {
return __x.c < __y.c; }
313 template<
typename _Tp,
typename _Seq>
316 {
return !(__x == __y); }
319 template<
typename _Tp,
typename _Seq>
322 {
return __y < __x; }
325 template<
typename _Tp,
typename _Seq>
328 {
return !(__y < __x); }
331 template<
typename _Tp,
typename _Seq>
334 {
return !(__x < __y); }
336 #if __cplusplus >= 201103L 337 template<
typename _Tp,
typename _Seq>
339 #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 341 typename enable_if<__is_swappable<_Seq>::value>::type
346 noexcept(noexcept(__x.swap(__y)))
349 template<
typename _Tp,
typename _Seq,
typename _Alloc>
352 #endif // __cplusplus >= 201103L 354 _GLIBCXX_END_NAMESPACE_VERSION
stack()
Default constructor creates no elements.
ISO C++ entities toplevel namespace is std.
void push(const value_type &__x)
Add data to the top of the stack.
const_reference top() const
A standard container giving FILO behavior.
void pop()
Removes first element.
Declare uses_allocator so it can be specialized in <queue> etc.