算法题中常用的C++ STL

2023-05-16

一、栈(stack)

stack实现了一种先进后出的数据结构,使用时需要包含stack头文件

C++定义stack语法:

stack<int> s;//int为栈的数据类型,可以为string,double等

C++中stack的基本操作有:

1、出栈:如 s.pop() 注意并不返回出栈的元素
2、进栈:如 s.push(x)
3、访问栈顶元素:如s.top();
4、判断栈空:如 s.empty() 栈为空时返回true
5、返回栈中元素个数,如:s.size()

下面举一个简单的例子:

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

int main()
{
    std::stack<int> s;      //定义一个int类型的stack
    for(int i=0;i<10;i++)   //将数字0~9依次入栈
        s.push(i);

    std::cout << s.empty() << std::endl; //将输出0,表示栈不为空

    for(int i=0;i<10;i++)
    {
        std::cout << s.top() << std::endl;//输出栈顶的元素,依次为9、8、...、0
        s.pop();    //出栈
    }
    std::cout << s.empty() << std::endl;//将输出1,表示栈为空
    return 0;
}

下面来看两个应用到栈的算法题:

例题一:

题目描述:
假设现要编制一个满足下列要求的程序:对一个表达式中只含有两种括号:圆括号和方括号,其嵌套的顺序随意,要求判断该表达式的括号是否匹配。
输入:
多组输入,每行输入一组括号组成的字符串。
输出:
对于每一组测试用例,如果匹配输出YES,否则输出NO
样例输入:
[()([])]
()]
样例输出:
YES
NO

思路:从该字符串第一个字符开始,遇到右括号时将该括号压入栈,遇到左括号时检查栈顶元素是否匹配(如’)’与’(‘匹配,’)’与’[‘不匹配),如果匹配,则弹出栈顶元素,如果不匹配则输出”NO”,结束该样例。最后还需要判断栈是否为空,如果为空,则输出”YES”,否则输出”NO”。
答案:
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
    /*freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);*/

    std::string str;
    std::stack<char> s;
    bool isMate;

    while(std::cin >> str)
    {
        isMate = true;
        for(int i = 0;i < str.size();i++)
        {
            if(str[i]=='('||str[i]=='[')
                s.push(str[i]);
            else if(str[i]==')')
            {
                if(!s.empty())
                {
                    if(s.top()!='(')
                    {
                        isMate = false;
                        std::cout << "NO" << std::endl;
                        break;
                    }
                    else
                        s.pop();
                }
                else
                {
                    isMate = false;
                    std::cout << "NO" << std::endl;
                    break;
                }
            }
            else if(str[i]==']')
            {
                if(!s.empty())
                {
                    if(s.top()!='[')
                    {
                        isMate = false;
                        std::cout << "NO" << std::endl;
                        break;
                    }
                    else
                        s.pop();
                }
                else
                {
                    isMate = false;
                    std::cout << "NO" << std::endl;
                    break;
                }
            }

        }
        if(isMate)
        {
            if(s.empty())
                std::cout << "YES" << std::endl;
            else
                std::cout << "NO" << std::endl;
        }

        while(!s.empty())
            s.pop();
    }
    return 0;
}
例题二:

中缀表达式转后缀表达式
时间限制:3000 ms | 内存限制:65535 KB
来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=467
描述
人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更“习惯于”后缀式,关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看,这里不再赘述,现在你的任务是将中缀式变为后缀式。
输入
第一行输入一个整数n,共有n组测试数据(n<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0
输出
每组都输出该组中缀式相应的后缀式,要求相邻的操作数操作符用空格隔开。
样例输入
2
1.000+2/4=
((1+2)*5+1)/4=
样例输出
1.000 2 4 / + =
1 2 + 5 * 1 + 4 / =

思路:http://blog.csdn.net/sgbfblog/article/details/8001651

答案:

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

int main()
{
    /*freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);*/

    string str; //str为输入的中缀表达式
    string exp; //exp存储输出的后缀表达式
    stack<char> s;
    char ch;
    int t;
    cin >> t;
    while (t--)
    {
        cin >> str;
        str.insert(str.length(), "#");  //在中缀表达式加一个#字符作为结束标记
        for (int i = 0; i < str.length(); i++)
        {
            ch = str[i];
            if (ch >= '0'&&ch <= '9' || ch == '.')  //如果为数字则直接输出
            {
                if (str[i + 1] >= '0'&&str[i + 1] <= '9'||str[i + 1] == '.')//用来判断是不是个位数
                    exp += ch;
                else
                {
                    exp += ch;
                    exp += ' ';
                }
            }
            else if (ch == '+' || ch == '-')
            {
                while (!s.empty()&&s.top()!='(')    //弹出栈中元素直到遇到左括号或栈为空为止
                {
                    exp += s.top();     //取栈顶元素并存储在字符串exp中
                    exp += ' ';
                    s.pop();    //栈顶元素弹出
                }           
                s.push(ch);     //将当前操作符压入栈
            }
            else if (ch == '*' || ch == '/')
            {
                while (!s.empty() && s.top() != '+'&&s.top() != '-'&&s.top()!='(') //弹出栈中元素直到遇到加号、减号或者左括号为止
                {
                    exp += s.top(); //取栈顶元素并存储在字符串exp中
                    exp += ' ';
                    s.pop();    //栈顶元素弹出
                }
                s.push(ch);     //将当前操作符压入栈
            }
            else if (ch == '(') //遇到左括号直接压入栈但不输出
                s.push(ch);
            else if (ch == ')') //遇到右括号则弹出栈中元素直到遇到左括号为止
            {
                while (s.top() != '(')
                {
                    exp += s.top();
                    exp += ' ';
                    s.pop();
                }
                s.pop();   //弹出左括号
            }
            else if (ch == '#') //遇到结束符则弹出栈中所有元素
            {
                while (!s.empty())
                {
                    exp += s.top();
                    exp += ' ';
                    s.pop();
                }
            }
        }
        cout << exp << "=" << endl;
        exp = "";   //清空字符串
    }
    return 0;
}

二、动态数组(vector)

C++中的vector是一个可以改变大小的数组,当解题时无法知道自己需要的数组规模有多大时可以用vector来达到最大节约空间的目的。使用时需要包含vector头文件。

定义一个一维动态数组的语法为

vector<int> a;  //int为该动态数组的元素数据类型,可以为string、double等

定义一个二维动态数组的语法为

vector<int*> a; //三维数据类型为int**,以此类推。

C++中vector的基本操作有:

1、push_back(x) 在数组的最后添加元素x。
2、pop_back() 删除最后一个元素,无返回值。
3、at(i) 返回位置i的元素。
4、begin() 返回一个迭代器,指向第一个元素。
5、end() 返回一个迭代器,指向最后一个元素的下一个位置。
6、front() 返回数组头的引用。
7、capacity(x) 为vector分配空间
8、size() 返回数组大小
9、resize(x) 改变数组大小,如果x比之前分配的空间大,则自动填充默认值。
10、insert 插入元素
①a.insert(a.begin(),10); 将10插入到a的起始位置前。
②a.insert(a.begin(),3,10) 将10插入到数组位置的0-2处。
11、erase 删除元素
①a.erase(a.begin()); 将起始位置的元素删除。
②a.erase(a.begin(),begin()+2); 将0~2之间的元素删除。
12、rbegin() 返回一个逆序迭代器,它指向最后一个元素。
13、rend() 返回一个逆序迭代器,它指向的第一个元素前面的位置。
14、clear()清空所有元素。

这里举一个简单的例子:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    vector<int> a;
    vector<int> b;

    for (int i = 0; i < 10; i++)    //向数组a依次添加0~9
        a.push_back(i);

    a.swap(b);      //将数组a元素与数组b元素交换
    cout << a.size() << " " << b.size() << endl;    //此时应当输出 0 10

    for (vector<int>::iterator it = b.begin(); it != b.end(); it++)//从第一个元素开始遍历数组元素
        cout << *it << " ";     //依次输出0~9
    cout << endl;

    b.erase(b.begin() + 1);     //删除位置1的元素,即元素1.
    cout << b.size() << endl;   //由于删除了一个元素,此时输出应当为8

    for (vector<int>::reverse_iterator rit = b.rbegin(); rit != b.rend(); ++rit)//逆向输出数组元素
        cout << *rit << " ";    //应当输出9 8 7 6 5 4 3 2 0
    cout << endl;

    b.resize(9);    //将数组空间设定为9,相当于比之前多了1个位置
    b.push_back(20);//在尾部添加元素20

    for (vector<int>::iterator it = b.begin(); it != b.end(); it++)
        cout << *it << " ";  //应当输出0 2 3 4 5 6 7 8 9 20

    return 0;
}

下面是运用到vector的例题:

题目名称:Where is the Marble? (Uva 10474)

链接:https://vjudge.net/problem/UVA-10474
简要翻译:例题:
大理石在哪儿
现有N个大理石,每个大理石上写了一个非负整数、首先把各数从小到大排序
然后回答Q个问题。每个问题问是否有一个大理石写着某个整数x,如果是,还要
回答哪个大理石上写着x。排序后的大理石从左到右编号为1~N。(在样例中,为了
节约篇幅,所有大理石的数合并到一行,所有问题也合并到一行。)输入以0 0结束

样例输入:
4 1
2 3 5 1
5
5 2
1 3 3 3 1
2 3
0 0
样例输出:
CASE# 1:
5 found at 4
CASE# 2:
2 not found
3 found at 3

思路:先将大理石编号从小到大排序,然后从第一个问题开始,遍历大理石,如果找到则输出该大理石的数组下标+1,如果没有找到则输出not found,接着从第二个问题开始,以此类推。

答案:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    /*freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);*/

    vector<int> a;  //定义一个动态数组a,用来存储大理石编号
    vector<int> find;   //定义动态数组find,存储待查找的大理石编号
    int N, Q;
    int tmp, count = 0;
    bool flag;
    while (cin >> N >> Q)
    {
        if (N == 0 && Q == 0)
            break;
        for (int i = 0; i < N; i++)
        {
            cin >> tmp;
            a.push_back(tmp); //依次输入大理石编号
        }
        for (int i = 0; i < Q; i++)
        {
            cin >> tmp;   
            find.push_back(tmp);//依次输入待查找编号
        }

        sort(a.begin(), a.end());   //对数组a进行从大到小排序
        flag = false;               //标记是否找到
        cout << "CASE# " << ++count << ":" << endl;
        for (int i = 0; i < Q; i++) //从第一个问题开始
        {
            flag = false;
            for (int j = 0; j < N; j++)
                if (find.at(i) == a.at(j)) //如果找到
                {
                    cout << find.at(i) << " found at " << j + 1 << endl;
                    flag = true;
                    break;
                }
            if (!flag) //没有找到
                cout << find.at(i) << " not found" << endl;
        }
        a.clear();  //清空数组,为下一组数据准备
        find.clear();
    }
    return 0;
}

三、集合(set)

C++中集合(set)类似于数学上的集合,即每个元素只能出现一次,使用该容器需要包含set头文件。

定义一个set的语法为:

set<int> s; //int为集合的数据类型,可以为string,double等

C++中set的基本操作有:

1、begin() 返回一个迭代器,指向第一个元素。
2、end() 返回一个迭代器,指向最后一个元素的下一个位置。
3、clear()清空set的所有元素。
4、empty() 判断是否为空。
5、size() 返回当前元素个数
6、erase(it) 删除迭代器指针it指向的元素。
7、insert(a) 插入元素a
8、count() 查找某个元素出现的次数,只有可能为0或1。
9、find() 查找某个元素出现的位置,如果找到则返回这个元素的迭代器,如果不存在,则返回s.end()

这里举一个简单的例子:

#include <iostream>
#include <algorithm>
#include <set>
using namespace std;

int main()
{
    set<int> s;
    s.insert(20);
    s.insert(10);
    s.insert(30);
    s.insert(10);

    cout << s.size() << endl; //将输出3,因为集合中元素不能重复
    for (set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout << *it << " ";     //将输出10 20 30,集合会自动排序
    cout << endl;

    //将输出1 0
    cout << count(s.begin(), s.end(), 20) << " " << count(s.begin(), s.end(), 40) << endl;

    s.erase(s.find(10));    //删除元素10
    for (set<int>::iterator it = s.begin(); it != s.end(); it++)
        cout << *it << " "; //将输出20 30
    return 0;
}

下面是一些运用到set的例题:

题目名称:Andy’s First Dictionary

链接:https://vjudge.net/problem/UVA-10815
题目简述:读入一篇英语文章,包含各种标点符号,要求按字典序输出文章中所有不同的单词。
样例输入:
Adventures in Disneyland
Two blondes were going to Disneyland when they came to a fork in the
road. The sign read: “Disneyland Left.”
So they went home.
样例输出:
a
adventures
blondes
came
disneyland
fork
going
home
in
left
read
road
sign
so
the
they
to
two
went
were
when
答案:

思路:从该文章的第一个字符开始遍历,遇到大写字母则直接改为小写字母,遇到标点符号则以空格替代。然后通过字符串流存储在一个集合中,最后打印该集合的元素即为答案。

#include <iostream>
#include <algorithm>
#include <set>
#include <string>
#include <sstream>
using namespace std;

int main()
{
    set<string> s; //定义一个集合s,用来存储单词
    string str, tmp;
    while (cin >> str) //读入一个单词(可能包含标点符号)
    {
        for (string::iterator it = str.begin(); it != str.end(); it++) //遍历该单词元素
        {
            if (isalpha(*it))  //判断是否是英文字母
                *it = tolower(*it); //转换为小写
            else
                *it = ' ';  //如果是标点符号则用空格替代它
        }
        stringstream sstr(str);  //定义一个字符串流并将处理后的单词赋值给它
        while (sstr >> tmp)   //将该流输入到字符串tmp中,因为可能包含空格所以需要使用循环
            s.insert(tmp);    //插入到集合s中,若集合中已经存在该单词则不会插入
    }
    for (set<string>::iterator it = s.begin(); it != s.end(); it++)
        cout << *it << endl;
    return 0;
}

四、队列(queue)

queue实现了一种先进先出的数据结构,使用时需要包含queue头文件。

定义一个queue的语法为:

queue<int> q;   //int为队列的数据类型,可以为string,double等

C++中queue的基本操作有:

1、入队,如:q.push(x) 将元素x置于队列的末端
2、出队,如: q.pop() 同样不会返回弹出元素的值
3、返回队首元素,如:q.front();
4、返回队尾元素,如:q.back();
5、判断是否为空,如:q.empty();
6、返回队列元素个数,如:q.size();

这里举一个简单的例子:

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

int main()
{
    queue<int> q;
    for(int i = 0;i < 10;i++)   //将0~9依次入队
        q.push(i);

    cout << q.front() << " " << q.back() << endl; //这里应当输出0和9

    //依次输出0、1、...、9
    for(int i = 0;i < 10;i++)
    {
        cout << q.front() << " ";
        q.pop();
    }
    return 0;
}

总结:

通过学习C++常用模板,在实际刷题过程中可以有效减少代码出错的几率和调试的难度,思路更清晰,代码更加简洁明了,可以有效提高刷题的速度和准确性。
如果该博客有错误的地方,欢迎指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法题中常用的C++ STL 的相关文章

  • QNX的调度算法

    作为一个硬实时操作系统 xff0c QNX是一个基于优先级抢占的系统 这也导致其基本调度算法相对比较简单 因为不需要像别的通用操作系统考虑一些复杂的 公平性 xff0c 只需要保证 优先级最高的线程最优先得到 CPU 就可以了 基本调度算法
  • 葡萄酒品酒的四个步骤

    第一步 xff1a 观色 将酒杯举到白色背景之上 xff0c 然后倾斜约45 xff0c 仔细观察酒液中心的颜色 边缘色泽 澄清度 通常而言 xff0c 红葡萄酒的越浅 xff0c 年份越老 xff1b 白葡萄酒的颜色越浅 xff0c 年份
  • 高通骁龙 8155 到底有什么魔力?

    高通骁龙8155采用安卓系统 xff0c 兼容性更好 xff0c APP的数量也就相当多 xff0c 硬件方面 xff0c 这颗芯片最高支持3个4K屏或4个2K屏 xff0c 4个麦克风6颗摄像头 xff0c 还有WiFi6 5G 蓝牙5
  • 当你遇到Bug该怎么办?

    一 问题复现 稳定复现问题才能正确的对问题进行定位 解决以及验证 一般来说 xff0c 越容易复现的问题越容易解决 1 1 模拟复现条件 有的问题存在于特定的条件下 xff0c 只需要模拟出现问题的条件即可复现 对于依赖外部输入的条件 xf
  • 增加远程访问用户

    http www zhuangjiba com hardware 34023 html http www zhuangjiba com hardware 34023 html 打开管理员权限 xff1a
  • 基于Java的“多功能五子棋”游戏的设计和实现

    源码地址 xff1a http download csdn net detail clx55555 9718406 下载或转载使用请声明原著 xff1a 但求心安 基于 Java的 多功能五子棋 游戏的设计和实现 引言 随着经济社会的迅速发
  • shell 脚本中的注释详解

    单行注释 xff1a 单行注释就比较简单了 xff0c 直接在行最前端加上符号 即可 具体用法如下所示 xff1a this is comment test echo 34 this is comment test 34 运行结果 xff1
  • 《演讲的本质》:如何做好一次公开演讲?

    关于本书 演讲的本质 是一本教你通过演讲最大化自己的影响力 建立信任关系的工具书 xff0c 探讨演讲的本质和价值 本书从视觉 听觉 语言三个角度来分析如何最大程度地打动听众 xff0c 并提供了行之有效的练习方法 核心内容 演讲的本质与价
  • ubuntu系统镜像下载源

    ubuntu 14 04 和16 04 快速下载 由于官网服务器在国外 xff0c 下载速度奇慢 xff0c 所以我们可以利用阿里云镜像下载ubuntu ubuntu 14 04 xff1a ubuntu releases 14 04安装包
  • 每天最重要的2小时

    关于作者 乔西 戴维斯 xff0c 他是哥伦比亚大学的心理学博士 xff0c 主要研究神经学领域 关于本书 从身体效能的角度 xff0c 让我们在面对一件事情时 xff0c 怎么才能把身体调整到一种巅峰状态 xff0c 进而对时间进行高效的
  • 【无标题】

    63张图 xff0c 一步一步带你弄清 Linux 虚拟内存管理 xff0c 厉害 内存管理子系统可谓是 Linux 内核众多子系统中最为复杂最为庞大的一个 xff0c 其中包含了众多繁杂的概念和原理 xff0c 通过内存管理这条主线我们把
  • 面试时不懂得自我介绍的人,最后都被PASS掉了

    做硬件维护的阿润最近后悔得直跳脚 在被公司赔偿清退后 xff0c 他直接开启了HIGH玩模式 xff0c 原计划先玩2个月再做面试准备 xff0c 结果冷不丁接到心仪公司的面试邀约 因为时间紧 邀约急 xff0c 在没做好充分准备的前提下
  • 开发板和电脑可以ping通但是ssh连接不上

    一 问题描述 某集群数据节点服务器频繁无法连接 xff0c 服务器间出现可ping通但ssh无法连接的情况 xff0c 使用带外地址登录后远程控制也无法显示正常界面 xff0c 重启后会短暂恢复 二 排查问题 重启服务器后检查服务器SSH状
  • 你对Linux下的实时性应该多点了解

    本文讲述一些有利于提高xenomai实时性的配置建议 xff0c 部分针对X86架构 xff0c 但它们的底层原理相通 xff0c 同样适用于其他CPU架构和系统 xff0c 希望对你有用 希望能够帮助大家 本文来自于微信公众号嵌入式Lin
  • 怎么保证ECU的“实时性”

    在最近一起有公开报道的辅助驾驶相关事故中 xff0c 由于AEB xff08 自动紧急制动系统 xff09 功能被怀疑没有起作用 xff0c 又有一家车企的高级辅助驾驶功能遭到质疑 其实 xff0c 目前大多数车辆中AEB功能的生效车速区间
  • 重磅成果丨ASAM SOVD 1.0.0正式发布

    重磅成果丨ASAM SOVD 1 0 0正式发布 测试行业动态 汽车测试网 编者寄语 xff1a 2022年6月底 xff0c ASAM SOVD 1 0 0版本正式发布 为了应对智能网联汽车时代井喷的软件诊断需求 xff0c SOVD如何
  • 2016-我在路上

    2016匆匆而过 xff0c 这一年做了很多 xff0c 也错过了很多 有些事情自己感觉很值得 xff0c 有些事情感觉很愧疚 xff0c 一年的酸甜苦辣尽在其中 寒假 xff0c 我加入的acm实验室 xff0c 有个集训 xff0c 但
  • 《复盘高手》

    今天为你介绍的是 复盘高手 xff0c 副标题是 自我认识与自我精进的底层逻辑 复盘 本是围棋的一个术语 xff0c 说的是下完一盘棋后 xff0c 棋手在棋盘上把下棋的过程复现一遍 xff0c 看看哪些地方下得好 xff0c 哪些地方不好
  • Linux 进程间通信(六)共享内存

    可以说 xff0c 共享内存是一种最为高效的进程间通信方式 xff0c 因为进程可以直接读写内存 xff0c 不需要任何数据的复制 为了在多个进程间交换信息 xff0c 内核专门留出了一块内存区 xff0c 这段内存区可以由需要访问的进程将
  • 对ASPICE的理解

    Aspice xff08 Automotive SPICE xff09 中文翻译为汽车软件过程改进及能力评定 是为保证软件质量的规范 xff0c 要求供应商按照Automotive SPICE的要求进行产品的设计与开发 是汽车行业中常用于质

随机推荐

  • 普通人如何改变自己的命运?

    Morty 普通人改变命运的秘密 xff01 我的观点可能会颠覆你的认知 哔哩哔哩 bilibili 非常感谢UP xff0c 你的每个视频我都看了 xff0c 给我启示最大的是 为什么你总是那么穷 xff0c 这些年一直走背运 xff0c
  • 指令流水线

    为提高处理器执行指令的效率 xff0c 把一条指令的操作分成多个细小的步骤 xff0c 每个步骤由专门的电路完成的方式 指令流水线是为提高处理器执行指令的效率 xff0c 把一条指令的操作分成多个细小的步骤 xff0c 每个步骤由专门的电路
  • 何为CPU的亲和性

    CPU的亲和性 xff0c 进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性 xff0c 进程迁移的频率小就意味着产生的负载小 亲和性一词是从affinity翻译来的 xff0c 实际可以称为CPU绑定 在多核运
  • Docker 快速入门

    x1f389 Docker 简介和安装 Docker 快速入门 https blog csdn net weixin 45043334 category 11863858 html https blog csdn net weixin 45
  • 如何提高Linux的实时性

    QNX是黑莓旗下的一款微内核实时操作系统 xff0c 是全球第一款通过ISO 26262 ASIL levelD安全认证的车载操作系统 xff0c QNX是一个分布式 嵌入式 可规模扩展的实时操作系统 它遵循POSIX 1 程序接口 和PO
  • 自旋锁和互斥锁的区别

    面试官 xff1a 你说说互斥锁 自旋锁 读写锁 悲观锁 乐观锁的应用场景 百度安全验证 自旋锁和互斥锁的区别 一缕阳光a的博客 CSDN博客 自旋锁和互斥锁的区别 POSIX threads 简称Pthreads 是在多核平台上进行并行编
  • CPU超线程技术到底有什么用?

    什么是超线程技术 前几天的超线程文章引起了不少讨论 xff0c 有些四驱两驱之类留言就不点出来了 今天咱们趁热打铁来聊下CPU超线程的实际用途 超线程的英文名是Hyper Threading Technology xff0c 简称HT 超线
  • 蓝桥杯 生日蜡烛

    某君从某年开始每年都举办一次生日party xff0c 并且每次都要吹熄与年龄相同根数的蜡烛 现在算起来 xff0c 他一共吹熄了236根蜡烛 请问 xff0c 他从多少岁开始过生日party的 xff1f 请填写他开始过生日party的年
  • QNX实时操作系统

    一个实时操作系统 xff08 RTOS xff09 必须是可靠的 xff1b 它必须是快速和响应的 xff0c 管理有限的资源和安排任务 xff0c 使它们按时完成 xff0c 并确保功能是隔离的 xff0c 不受其他功能的干扰 在本节中
  • Makefile教程(绝对经典)

    Makefile教程 xff08 绝对经典 xff0c 所有问题看这一篇足够了 xff09 GUYUEZHICHENG的博客 CSDN博客 makefile 该篇文章为转载 xff0c 是对原作者系列文章的总汇加上标注 支持原创 xff0c
  • 王道考研操作系统笔记

    https mp weixin qq com mp appmsgalbum biz 61 MzI0OTI2MjY2MQ 61 61 amp action 61 getalbum amp album id 61 227777034051051
  • 《管理的常识》:怎么做一个优秀的管理者?

    关于作者 艾伦 默里是 华尔街日报 的副总编 xff0c 华尔街日报 网和市场观察网的执行主编 xff0c 同时也是三次普利策新闻奖的得主 默里先生自己的新闻作品也获得过多次大奖 xff1a 关于亚洲的报道让他两次摘取了海外新闻出版俱乐部奖
  • VLAN 基础知识

    为什么需要VLAN 1 什么是VLAN VLAN Virtual LAN xff0c 翻译成中文是 虚拟局域网 LAN可以是由少数几台家用计算机构成的网络 xff0c 也可以是数以百计的计算机构成的企业网络 VLAN所指的LAN特指使用路由
  • 目标设定的SMART原则

    目标设定的SMART原则来源于管理大师彼得 德鲁克的 管理的实践 xff0c 有五个基本的原则 xff1a 1 目标必须是具体的 xff08 Specific xff09 2 目标必须是可以衡量的 xff08 Measurable xff0
  • 软件安全开发 - 流程规范

    写一篇软件安全开发流程分享给大家 xff0c 帮助从事软件开发 xff0c 测试 xff0c 管理的人员 xff0c 规范操作 xff0c 重视软件工程安全 现今社会存在各种网络安全事件 xff0c 比如勒索病毒导致许多网络系统瘫痪 xff
  • 读保护_混合ASIL系统中不同安全等级模块间的边界保护

    01 功能安全组件的软件开发 针对ISO 26262对功能安全软件研发的要求 xff0c AUTOSAR将功能安全需求进行了具体拆分 当前的AUTOSAR规范囊括了诸多功能安全组件软件开发的需求概念 在AUTOSAR系统设计的架构中 xff
  • 功能安全的一些好文

    特约专栏 一篇文章带你认识功能安全 本文将结合ISO 26262 xff0c 从什么是功能安全 什么是功能安全工程师以及功能安全工程师主要做什么 xff0c 三个方面展开对功能安全的介绍 https mp weixin qq com s v
  • make和makefile

    第二十六课 xff1a Makefile设计 哔哩哔哩 bilibili 内部资料 课程简介 大连理工大学国家精品课 嵌入式软件设计是计算机 软件工程等学科的专业方向课 xff0c 是一门实践性 技术性很强的重要课程 本课程的主要任务是全面
  • acm算法有用吗?写给自己。

    acm算法有用吗 xff1f 写给自己 xff0c 也希望能帮助那些大一迷茫的人 我是一个普通二本院校即将进入大三的acmer xff0c 一般问这个问题的人都是一个acmer的失败者 xff0c 因为成功的人都去忙着学习该学习的算法了 x
  • 算法题中常用的C++ STL

    一 栈 xff08 stack xff09 stack实现了一种先进后出的数据结构 xff0c 使用时需要包含stack头文件 C 43 43 定义stack语法 xff1a span class hljs stl container sp