首页 > 其他分享 >STL进制转换

STL进制转换

时间:2023-02-20 15:32:55浏览次数:40  
标签:容器 转换 进制 STL 元素 栈顶 堆栈 出栈 stack


输入一个十进制数N,将它转换成R进制数输出。

Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output 为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。 Sample Input

7 2
23 12
-4 3

Sample Output

111
1B
-11

 

 

 

 

在C++标准中,STL被组织为下面的13个头文件:<​​algorithm​​​>、<​​deque​​​>、<​​functional​​​>、<​​iterator​​​>、<​​array​​​>、<​​vector​​​>、<​​list​​​>、<forward_list>、<​​map​​​>、<unordered_map>、<memory>、<​​numeric​​​>、<​​queue​​​>、<​​set​​​>、<unordered_set>、<​​stack​​​>和<​​utility​​>。

 

本题是应用了stack 模板 。

 

stack堆栈容器

堆栈是一个线性表,插入和删除只在表的一端进行。这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom)。堆栈的元素插入称为入栈,元素的删除称为出栈。由于元素的入栈和出栈总在栈顶进行,因此,堆栈是一个后进先出(Last In First Out)表,即 LIFO 表。
    C++ STL 的堆栈泛化是直接通过现有的序列容器来实现的,默认使用双端队列deque的数据结构,当然,可以采用其他线性结构(vector 或 list等),只要提供堆栈的入栈、出栈、栈顶元素访问和判断是否为空的操作即可。由于堆栈的底层使用的是其他容器,因此,堆栈可看做是一种适配器,将一种容器转换为另一种容器(堆栈容器)。
    为了严格遵循堆栈的数据后进先出原则,stack 不提供元素的任何迭代器操作,因此,stack 容器也就不会向外部提供可用的前向或反向迭代器类型。
    stack堆栈容器的C++标准头文件为 stack ,必须用宏语句 "#include <stack>" 包含进来,才可对 stack 堆栈的程序进行编译。
   

创建 stack 对象
使用堆栈前,先要利用构造函数进行初始化,创建一个堆栈对象,以进行元素的入栈、出栈等操作。
1.    stack()
    默认构造函数,创建一个空的 stack 对象。
    例如,下面一行代码使用默认的 deque 为底层容器,创建一个空的堆栈对象 s 。
    stack<int>  s;
    
2.    stack(const stack&)
    复制构造函数,用一个 stack 堆栈创建一个新的堆栈。
    例如,下面的代码利用 s1 ,创建一个以双向链表为底层容器的空堆栈对象 s2 。
    // stack<int, list<int> >   s1;
    stack<int, list<int> >   s2(s1);
    

元素入栈
    stack堆栈容器的元素入栈函数为 push 函数。由于 C++ STL 的堆栈函数是不预设大小的,因此,入栈函数就不考虑堆栈空间是否为满,均将元素压入堆栈,从而函数没有标明入栈成功与否的返回值。
    如下是他的使用原型:
    void  push(const value_type& x)
    
    
元素出栈
    stack容器的元素出栈函数为 pop 函数,由于函数并没有判断堆栈是否为空,才进行元素的弹出,因此,需要自行判断堆栈是否为空,才可执行 pop 函数。
    void pop()
    
    下面的示例代码,将堆栈的所有元素全部出栈
    // stack<int>  s;
    while(!s.empty())
    { 
        s.pop();// 出栈
    }
    
    
取栈顶元素
    stack容器的栈顶元素的读取函数为 pop 函数,将取出最后入栈的元素,如下是它的使用原型
    value_type&  top()

堆栈非空判断
    随着堆栈元素不断出栈,堆栈可能会出现空的情况,因此,一般需要调用 empty 函数判断是否非空,才作元素出栈和取栈顶元素的操作。
    bool  empty()
    判断堆栈是否为空,返回 true 表示堆栈已空,false 表示堆栈非空。

 

 

 

c++ stl栈stack介绍

 

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。

c++ stl栈stack的头文件为

#include <stack> 

c++ stl栈stack的成员函数介绍

操作 比较和分配堆栈

empty() 堆栈为空则返回真

pop() 移除栈顶元素

push() 在栈顶增加元素

size() 返回栈中元素数目

top() 返回栈顶元素

 

 

 

 

 

代码实现:

 

#include<cstdio>
#include<iostream>
#include<stack>
void transformn(int n,int m);
using namespace std;
int main()
{
int figure ,d ;
while(scanf("%d%d",&figure,&d)!=EOF)

{transformn(figure,d);
printf("\n");
}

return 0;
}
void transformn(int n,int b)
{

int i;
int k=n;
stack<int >mystack;
if(n!=0){
if(n<0)
n=-n;

while(n) // 进栈
{

mystack.push(n%b) ;//先入的为栈底,后出栈
n/=b;
}
if(k<0)
printf("-");
while(!mystack.empty()) //出栈
{

i = mystack.top(); //栈顶元素 赋值给i
if(i>=10&&b>10)
{

printf("%c",i+'A'-10);

mystack.pop() ;
}// 把栈顶元素出栈(踢出去)
else
{
mystack.pop() ;
printf("%d",i);

}

}
}
else
{
printf("0");
}

}

 

 

 

 

 

 

标签:容器,转换,进制,STL,元素,栈顶,堆栈,出栈,stack
From: https://blog.51cto.com/u_15970235/6068593

相关文章

  • FFmpeg转换直播流格式
    mp4转rtspffmpeg-re-i1671680590843.mp4-vcodeccopy-acodeccopy-frtsprtsp://localhost:8554/live.sdp mp4转hlsffmpeg-re-iD:\下载[www.domp4.cc]兔子......
  • file的各种转换
    1.将bloburl转换为file格式letdata={name: "新年致辞.png",status: "success",uid: 1664334311149,url: "blob:http://localhost:9528/d66ad67a......
  • 直流信号模拟量1-5V0-10V转4-20mA0-24V光电隔离转换放大器2进2出
    概述​导轨安装DIN22IPOOC系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医......
  • 电源合理应用之降低外壳温度 DC-DC电源模块转换器
    在一定的工作环境温度和输出负载条件下,在正常的大气环境下(自然对流冷知),外壳到周围环境的热阳可能仲外壳工作温度超过特定的最大值。如果确究如此,就需要降低外壳到周围......
  • 00022.12 [第三种]转换流:OutputStreamWriter
    系列文章目录文章目录​​系列文章目录​​​​前言​​​​一、OutputStreamWriter​​​​代码​​前言接上一篇InputStreamReader一、OutputStreamWriter此篇编码:字符......
  • 00022.12 [第三种]转换流:InputStreamReader
    转换流:InputStreamReader目录文章目录​​转换流:InputStreamReader目录​​​​一、是什么?​​一、是什么?解码:字节输入流转字符输入流的转换流(稍微有点拗口)下面看怎么用不......
  • 类型转换
    ## 类型转换> **二进制**>> 1. 在计算机运算的时候,都是以 **补码** 的方式来运算的。> 2. 二进制 转为 十进制,必须使用 **二进制的原码** 进行转换 。......
  • 【Go】类型转换
    字符串转int32packagemainimport( "fmt" "strconv")funcmain(){ str:="12345" num,err:=strconv.ParseInt(str,10,32) iferr!=nil{ fmt.Print......
  • YUV视频格式到RGB32格式转换的速度优化
     YUV视频格式到RGB32格式转换的速度优化上篇                    [email protected]   2007.10.30  tag:YUV,YCbCr,YUV到RGB颜色转换,YUV......
  • int与bigdecimal的相互转换
    int转bigdecimalBigDecimalnumber=newBigDecimal(0);intvalue=score;number=BigDecimal.valueOf((int)value);bigdecimal转intBigDecimalb=newBigDe......