我是靠谱客的博主 沉静洋葱,最近开发中收集的这篇文章主要介绍C++ STL标准库:std::stack堆栈的使用 入栈push() 出栈pop() 获取元素top()std::stack::emptystd::stack::sizestd::stack::topstd::stack::pushstd::stack::emplace (C++11)std::stack::popstd::stack::swap(C++11),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • std::stack::empty
  • std::stack::size
  • std::stack::top
  • std::stack::push
  • std::stack::emplace (C++11)
  • std::stack::pop
  • std::stack::swap(C++11)

LIFO堆栈

堆栈是一种容器适配器,专门设计用于在LIFO环境(后进先出)中操作,在该环境中,仅从容器的一端插入和提取元素。

堆栈被实现为容器适配器,它们是使用特定容器类的封装对象作为其基础容器的类,提供了一组特定的成员函数来访问其元素。 元素从特定容器的“后部”被推入/弹出,这被称为堆栈的顶部。

基础容器可以是任何标准容器类模板或某些其他专门设计的容器类。 容器应支持以下操作:

  • empty
  • size
  • back
  • push_back
  • pop_back

标准容器类vectordequelist满足这些要求。 默认情况下,如果没有为特定的堆栈类实例指定容器类,则使用标准容器deque

std::stack::empty

函数原型:

bool empty() const;

测试容器是否为空

返回堆栈是否为空:即其大小是否为零。

该成员函数有效地将成员清空底层容器对象。

参数:

返回值:
如果基础容器的大小为0,则为true,否则为false。


std::stack::size

函数原型:

size_type size() const;

返回堆栈中的元素数。

该成员函数有效地调用基础容器对象的成员大小。

参数:

返回值:
基础容器中的元素数。

成员类型size_type是无符号整数类型。


std::stack::top

函数原型:

      reference& top();
const_reference& top() const;

返回对栈顶元素的引用。

由于堆栈是后进先出容器,因此top元素是插入堆栈中的最后一个元素。

该成员函数有效地将成员调用回基础容器对象。

参数:

返回值:
对栈顶元素的引用。


std::stack::push

函数原型:

void push (const value_type& val);
void push (value_type&& val);

插入元素

在堆栈顶部的当前顶部元素上方插入一个新元素。 此新元素的内容被初始化为val的副本。

该成员函数有效地调用基础容器对象的成员函数push_back。

参数:
val:
插入的元素初始化为的值。

成员类型value_type是容器中元素的类型(定义为第一类模板参数T的别名)。

返回值:
none


std::stack::emplace (C++11)

函数原型:

template <class... Args> void emplace (Args&&... args);

构造并插入元素

在堆栈顶部的当前顶部元素上方添加一个新元素。 这个新元素通过传递args作为其构造函数的参数而就地构造。

该成员函数有效地调用基础容器的成员函数emplace_back,转发args。

参数:
args:
用于构造新元素的参数。

返回值:
none


std::stack::pop

函数原型:

void pop();

删除顶部元素

删除堆栈顶部的元素,有效地将其大小减小了一个。

删除的元素是插入堆栈中的最新元素,可以通过调用成员stack :: top检索其值。

这将调用已删除元素的析构函数。

该成员函数有效地调用基础容器对象的成员函数pop_back。

参数:

返回值:


std::stack::swap(C++11)

函数原型:

void swap (stack& x) noexcept(/*see below*/);

交换内容

用x交换容器适配器(* this)的内容。

该成员函数调用非成员函数swap(不合格)来交换基础容器。

noexcept说明符与基础容器上的交换操作匹配。

参数:
x:
另一个相同类型的堆栈容器适配器(即,使用相同的模板参数T和Container实例化)。 大小可能会有所不同。

返回值:
none


#include <iostream>
#include <stack>
#include <string>
#include <list>
#include <assert.h>

using namespace std;

void main()
{	 
	stack<string,list<string> > s1;
	s1.push("苹果");
	cout<<""苹果" 放入堆栈中.  "<<endl;
	s1.push("香蕉");
	cout<<""香蕉" 放入堆栈中.  "<<endl;
	s1.push("梨子");
	cout<<""梨子" 放入堆栈中.  "<<endl;
	s1.push("西瓜");
	cout<<""西瓜" 放入堆栈中.  "<<endl;

	assert(s1.size()==4);
	assert(s1.top()=="西瓜") ;

	cout<<"将元素从栈顶弹出."<<endl;
	while(s1.size())
	{	 
		cout<<"  "<<s1.top()<<endl;
		s1.pop();
	}
}

在这里插入图片描述

最后

以上就是沉静洋葱为你收集整理的C++ STL标准库:std::stack堆栈的使用 入栈push() 出栈pop() 获取元素top()std::stack::emptystd::stack::sizestd::stack::topstd::stack::pushstd::stack::emplace (C++11)std::stack::popstd::stack::swap(C++11)的全部内容,希望文章能够帮你解决C++ STL标准库:std::stack堆栈的使用 入栈push() 出栈pop() 获取元素top()std::stack::emptystd::stack::sizestd::stack::topstd::stack::pushstd::stack::emplace (C++11)std::stack::popstd::stack::swap(C++11)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部