欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

STL之stack

程序员文章站 2022-03-25 17:51:08
stack即栈,一种先进后出的数据结构。 这次会在stack的基础上讲两个实际应用,以及讲一下stringstream。 直接上代码! 1、stack基础 #include #include using namespace std; int main() { //构 ......

stack即栈,一种先进后出的数据结构。

这次会在stack的基础上讲两个实际应用,以及讲一下stringstream。

直接上代码!

1、stack基础

#include<iostream>
#include<stack>
using namespace std;

int main()
{
    //构造
    stack<int> s; //一般空参构造

    //入栈
    s.push(2);
    s.push(6);
    s.push(8);
    cout << s.size() << endl; //size:3
    //stack不能遍历,只能一个一个退栈
    while (!s.empty()) { //输出8 6 2 先进后出
        cout << s.top() << ' '; //取栈顶,不会退栈
        s.pop(); //退栈,无返回值
    }
    cout << endl << s.size() << endl; //size:0
    return 0;
}

2、进制转换

#include<iostream>
#include<stack>
using namespace std;

int main()
{
    //进制转换10->2
    stack<int> s;
    int n;
    cin >> n;
    while (n) {
        s.push(n % 2);
        n /= 2;
    }
    while (!s.empty()) {
        n = n * 10 + s.top();
        s.pop();
    }
    cout << n << endl;
    return 0;
}

3、以空格分割的字符串逆序输出

#include<iostream>
#include<stack>
#include<string>
#include<sstream>
using namespace std;

int main()
{
    //以空格分割的字符串逆序输出
    string str;
    stack<string> s;
    getline(cin, str); //输入一行字符串
    stringstream ss; //stringstream常用于string类型转其他类型和切分以空格分割的字符串,头文件<sstream>
    ss << str;
    while (ss >> str)
        s.push(str);
    while (!s.empty()) {
        cout << s.top();
        s.pop();
        if (s.size() != 0)
            cout << ' ';
    }
    cout << endl;
    return 0;
}

4、string类型转换

#include<iostream>
#include<stack>
#include<string>
#include<sstream>
using namespace std;

int main()
{
    //字符串转int/double,使用stringstream
    int intval;
    double douval;
    stringstream ss;
    string str1 = "268";
    string str2 = "268.369";
    ss << str1;
    ss >> intval;
    ss.clear(); //一定要clear
    ss << str2;
    ss >> douval;
    cout << double(intval + douval) << endl;

    //字符串类型与int类型之间的转换,使用函数
    int n = stoi(str1);
    cout << 2 * n << endl;
    string str3 = to_string(n);
    cout << str1 + str3 << endl;
    return 0;
}