vector 是 stl 的一个关联容器,名叫“栈”,何为“栈”?其实就是一个数组,但有了数组何必还需栈,这是一个高深的问题。
一、简介
1. 定义
栈,是一个柔性数组(可变长数组),可以变大变小但是和队列不一样,栈是先进后出(FILO),就说栈只能在一端入栈或者出栈。如下,在…一段可以出栈或者入栈。
栈
2. 实现
栈的实现离不开 deque(双向队列),双向队列则使用了 allocator ,即分配器:
_LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX17
_Tp* allocate(size_t __n) {
if (__n > allocator_traits<allocator>::max_size(*this))
__throw_length_error("allocator<T>::allocate(size_t n)"
" 'n' exceeds maximum supported size");
if (__libcpp_is_constant_evaluated()) {
return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
} else {
return static_cast<_Tp*>(_VSTD::__libcpp_allocate(__n * sizeof(_Tp), _LIBCPP_ALIGNOF(_Tp)));
}
}
二、应用
1.定义
包含 stack 头文件:
#include <vector>
和一般模板类一样,先写类型名,再填模板,最后写变量名:
stack <int> MyStack;
三、相关函数
1. push
入栈:
MyStack.push(0);
2. swap
交换两个 stack:
MyStack.swap(tmp);
3. pop
出栈:
MyStack.pop();
4. size
查看 stack 大小:
cout << MyStack.size();
5. top
返回栈顶元素:
cout << MyStack.top();
你学会了吗?