目录
一、成员函数
一、构造函数
二、入栈
三、出栈
四、判空 empty ()
五、栈大小 size
六、取栈顶元素 top
七、入栈 emplace
八、交换函数 swap
二、非成员函数重载
一、关系运算符重载
二、交换函数
C++中的stack不再是容器,而是容器适配器
注意:stack不再支持迭代器,因为stack必须保证先进后出
一、成员函数
一、构造函数
1.默认构造函数 explicit stack (const container_type& ctnr = container_type())
(声明为explicit的函数不能进行隐式类型转换使用)
stack<int> st;
二、入栈
void push (const value_type& val)
stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
三、出栈
void pop ()
四、判空 empty ()
bool empty () const
stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
while (!st.empty()) st.pop();
五、栈大小 size
szie_type size() const
stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
cout << st.size() << endl;//10
六、取栈顶元素 top
value_type& top ()
const value_type& top () const
stack<int> st;
for (int i = 0; i < 10; ++i) st.push(i);
cout << st.top() << endl;//9
七、入栈 emplace
template <class... Args> void emplace (Args&&... args)
对于内置类型,emplace和push的功能一样,没有区别;对于自定义类型,使用push前必须先将要入栈的对象实例化出来,而emplace可以直接传入对象的构造参数
总结:push的功能emplace都具有,但是push需要先将对象构造好,再拷贝过去压入栈中;而empalce可以自动调用要插入对象的构造函数构造出对象,并直接入栈。emplace相比于push省去了拷贝的步骤,更加节省内存。
stack<pair<int, char>> st;
pair<int, char> pr(10, 'a');
st.push(pr);
st.emplace(20, 'b');
八、交换函数 swap
void swap (stack& x) noexcept
交换两个栈的数据
stack<int> st1;
st1.push(1); st1.push(1); st1.push(1);
stack<int> st2;
st2.push(2); st2.push(2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 3 st2_size(): 2
st1.swap(st2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 2 st2_size(): 3
二、非成员函数重载
一、关系运算符重载
(1) | template <class T, class Container> bool operator== (const stack<T,Container>& lhs, const stack<T,Container>& rhs); |
---|---|
(2) | template <class T, class Container> bool operator!= (const stack<T,Container>& lhs, const stack<T,Container>& rhs); |
(3) | template <class T, class Container> bool operator< (const stack<T,Container>& lhs, const stack<T,Container>& rhs); |
(4) | template <class T, class Container> bool operator<= (const stack<T,Container>& lhs, const stack<T,Container>& rhs); |
(5) | template <class T, class Container> bool operator> (const stack<T,Container>& lhs, const stack<T,Container>& rhs); |
(6) | template <class T, class Container> bool operator>= (const stack<T,Container>& lhs, const stack<T,Container>& rhs); |
二、交换函数
template <class T, class Container>
void swap (stack<T, Container>& x, stack<T, Container>& y) noexcept
stack<int> st1;
st1.push(1); st1.push(1); st1.push(1);
stack<int> st2;
st2.push(2); st2.push(2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 3 st2_size(): 2
swap(st1, st2);
cout << "st1_size: " << st1.size() << " st2_size(): " << st2.size() << endl;
//st1_size: 2 st2_size(): 3