C++ STL

【C++】STL简介 STL简介。开始学习STL之前,是不是得先知道STL是个什么东西,以及如何学习STL呢?话不多说,开始我们今天的内容!是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。本篇博客主要介绍了有关STL的历史,主流版本,六大组件,以及其优缺点和学习方法等内容。希望能帮助到大家。♥C++ 阅读详情

C++ STL

概述

STL主要有container , algorithm和iterator三大部分构成

  • 容器用于存放数据对象

  • 算法用于操作容器中的数据对象

  • 迭代器是算法和容器之间的中介

STL容器

STL容器是一种数据结构,例如链表、栈和队列等

STL常用数据结构和头文件:

数据结构说明头文件
向量vector连续存放数据,底层为数组,支持快速随机访问<vector>
字符串string字符串<string>
双端队列deque连续存储的指向不同元素的指针所组成的数组。支持首尾元素快速删除,也支持随机访问<deque>
链表list由节点组成的链表,每个节点包含着一个元素。底层结构为双向链表,支持结点的快速删除。<list>
栈stack先进后出<stack>
队列queue先进先出<queue>
优先队列priority_queue元素的进出队顺序由关系函数决定。底层结构一般为vector或者deque<queue>
集合set/ 多重集合multiset结点组成的红黑树,每个节点包含一个元素,set中的所有元素有序但是不重复,multiset中的所有关键字有序但是可以重复<set>
映射map/多重映射multimap由键值对组成的集合,底层数据结构为红黑树,map中的所有关键字有序但是不重复,multimap中的所有关键字有序但是可以重复<map>

使用STL需要引入命名空间: std

STL算法

STL算法是用来操作容器中数据的模板函数,大概提供了100个实现算法的模板函数。

使用泛型设计,STL算法有很好的通用性

STL算法主要由头文件<algorithm>、<numeric> 和<functional>组成

  • <algorithm>是所有STL头文件中最大的一个,由一大堆模板函数组成,涉及容器元素的比较,排序,查找,遍历,复制,删除,修改等等
  • <numeric> 体积很小,只包含几个简单的数学运算的模板函数
  • <functional>中定义了一些模板类,用于声明关系函数对象
STL迭代器

STL迭代器用于访问容器中的数据对象。

每个容器都有自己的迭代器,只有容器自己知道如何访问自己的元素。算法通过迭代器来定位和操作容器中的元素

迭代器操作符:

  • ++ 递增迭代器,访问下一个数据对象
  • – 递减迭代器
  • *返回迭代器所指的元素值

常用迭代器

  • iterator

    指向容器中存放元素的迭代器,用于正向遍历容器中的元素

  • const_iterator

    指向容器中存放元素的常量迭代器,只能读取元素

  • reverse_iterator

    指向容器中存放元素的反向迭代器,反向遍历元素

  • const_revserse_iterator

    指向容器中存放元素的常量反向迭代器,只能读取元素

常用的STL容器

每一个容器都是一个类模板

大致分类为顺序容器、关联容器、适配器容器

  • 顺序容器

    按照线性次序的位置存储数据,有: vector, string, deque, list

  • 关联容器

    每一个元素有一个key,通过key 来存储和读取元素,与元素在容器中的位置无关,所以关联容器不提供front(), push_front() ,back()…

  • 适配器容器

    基于其他容器实现的容器,适配器容器包含另一个容器作为其底层容器,在底层容器的基础上实现适配器容器的功能。

vector向量容器

相当于数组,存储具有相同数据类型的一组元素。

可以随机访问元素,但是插入、删除元素较慢。

可以动态增加大小 --> 通常按照两倍大小扩展

定义
vector<int> v1; 
vector<int> v2(10);  // 初始大小为10
vector<int> v3(10,1); // 初始大小为10,每个元素的初始值为1
vector<int> v4(a,a+5); // 用数组a[0..4] 共5个元素初始化v4
成员函数
  • empty() 判断是否为空
  • size() 实际元素的个数
  • [] 返回指定下标的元素
  • reserve(n) 为当前vector预分配n个元素的存储控件
  • capacity() 返回容量
  • resize(n) 调整大小
  • push_back() 向尾部添加一个元素
  • insert(pos,elem) 在pos位置添加一个元素
  • front() 获取第一个元素
  • back() 获取最后一个元素
  • erase() 删除某个迭代器或者迭代器区间指定的元素
  • clear() 清空
  • begin() 引用容器的第一个元素
  • end() 引用容器的最后一个元素后面的位置
  • rbegin() 引用容器的最后一个元素
  • rend() 返回容器第一个元素前面的一个位置
string 字符串容器

保存字符序列的容器,所有元素为字符类型, 类似vector<char>

定义
string(); // 建立一个空的字符串
string(const string & str) ; // 用字符串str建立当前的字符串
string(const string & str,size_type str_idx); // 用字符串str起始于str_idx的字符建立当前字符串
string(const string & str,size_type str_idx,size_type str_num); // 用字符串str起始于str_idx 的str_num 个字符建立当前字符串
string(const char * cstr); // 用c字符串cstr建立当前字符串
string(const char * cstr,size_type chars_len); // 用c字符串cstr开头的chars_len 个字符建立当前字符串
string(size_type num,char c); // 用num个字符c建立当前字符串
成员函数
  • empty()
  • size()
  • length()
  • [idx] 返回索引idx位置上的字符
  • at(idx)
  • compare(const string& str) 返回比较结果,相等返回0
  • append(str) 在字符串的末尾添加一个字符串str
  • insert(size_type idx,const string & str) 在当前字符串idx处插入一个字符串str
  • find(string & s, size_type pos) 从pos位置开始查找字符串s的第一个位置,没有返回-1
  • replace(size_type idx,size_type len,const string & str) 将字符串起始于idx的len个字符用一个字符串str替换
  • replace(iterator beg,iterator end,const string& str) 将当前字符串中有迭代器beg和end指向区间的所有字符用一个字符串str替换
  • substr(size_type idx) 返回当前字符串起始于idx的子串
  • substr(size_type idx,size_type len) 返回当前字符串起始于idx的长度为len 的子串
  • clear()
  • erase() 删除所有字符串
  • erase(size_type idx) 删除从idx开始的所有字符
  • erase(size_type idx,size_type len) 删除从下标idx开始的len个字符
deque双端队列

块内连续,块间不连续

定义
deque<int> dq;
deque<int> dq(10);
deque<int> dq(10,1); // 10个元素,每个元素的初值都是1
deque<int> dq(dq1.begin(),dq1.end())  // 使用dq1的元素初始化dq
成员函数
  • empty()
  • size()
  • push_front(elem)
  • push_back(elem)’
  • pop_front()
  • pop_back()
  • erase()
  • clear()
  • begin()
  • end()
  • rbegin()
  • rend()
list链表容器
定义
list<int> l1;
list<int> l2(10);
list<int> l3(10,1);
list<int> l4(a,a+5); // 使用数组a[0..4] 共5个元素初始化l4
成员函数
  • empty()
  • size()
  • push_back()
  • pop_back()
  • remove() 删除链表容器中所有指定值的元素
  • remove_if(cmp) 删除链表容器中满足条件的元素
  • erase()
  • unique() 删除链表容器中相邻的重复元素
  • clear()
  • insert(pos,elem)
  • insert(pos,n,elem) 在pos位置插入n个elem
  • insert(pos,pos1,pos2) 在迭代器pos处插入[pos1,pos2)的元素
  • reverse() 反转链表
  • sort() 排序
  • begin()
  • end
  • rbegin()
  • rend()

STL提供的sort() 算法主要用于支持随机访问的容器,list容器不支持随机访问,为此list容器提供了sort() 成员函数用于元素排序

set 集合/ multiset多重集合容器
  • set中的关键字是唯一的

    在插入元素时,如果已经存在则不插入

  • multiset 中的关键字可以不唯一

    允许存在相同关键字的元素,删除时会将相同关键字的元素都删除,并返回删除个数

默认情况下会对元素按照关键字自动进行升序排列,同时支持交,差,并等集合运算

成员函数
  • empty()
  • size()
  • insert()
  • erase()
  • clear()
  • count(k) 返回容器中关键字k出现额次数
  • find(k) 如果存在关键字k的元素,返回该元素的迭代器,否则返回end()值
  • upper_bound() 返回一个迭代器,指向关键字大于k的第一个元素
  • lower_bound()
  • begin()
  • end()
  • rbegin()
  • rend()
map映射/multimap多重映射容器

实现关键字与值映射,可以使用一个关键字key来访问响应的数据值

map/multimap中的key和value是一个pair类结构

struct pair{
    T first;
    T second;
}

map/multimap 可以根据key快速找到与之对应的value( 时间复杂度 O(log2(n)) )

  • map中不允许key重复,支持[]运算符
  • multimap允许key重复, 但是不支持[] 运算符
成员函数
  • empty()
  • size()
  • map[key] 返回关键字为key的元素的引用,如果不存在这样的关键字,则以key作为关键字插入一个元素( 不适合multimap )
  • insert(elem) 插入一个元素并返回该元素的位置
  • clear()
  • find()
  • count() 容器中指定关键字的元素个数,map中只有1 和 0
  • begin()
  • end()
  • rbegin()
  • rend()
map<char,int> mymap;
mymap['a'] = 1;
stack 栈容器

后进先出

默认底层是deque容器,也可以指定底层容器

// 指定底层容器为vector, 第二个参数指定底层容器
stack<string,vector<string>> myst;

stack容器只有一个出口–>栈顶,可以在栈顶插入,删除元素,不允许顺序遍历

成员函数
  • empty()
  • size()
  • push(elem)
  • top() 返回栈顶元素
  • pop()
queue队列容器

先进先出

不允许顺序遍历

成员函数
  • empty()
  • size()
  • front() 返回队头元素
  • back() 返回队尾元素
  • push(elem) 入队
  • pop() 出队
priority_queue优先队列容器

优先队列中元素,出队将按照优先级的高低。

成员函数
  • empty()
  • size()
  • push(elem) 元素进队
  • top() 获取队头元素
  • pop() 出队

优先队列中优先级的高低由队列中数据元素的关系函数(比较运算符) 确定

  • 默认的关系函数-> 对于内置数据类型,默认关系函数是值越大优先级越高 --> 大根堆

  • 可以重载自定义关系函数

    //1. 重载“<”操作符来定义优先级
    //定义结构体
    struct info{
        string name;
        float score;
        //重载< 操作符,指定优先级规则(排序规则)
        bool operator < (const info & a)const{
    		//按从小到大排序(原本是< ,现在的功能是>)
           return score > a.score;
        }
    };
    
    // priority_queue<info> pq;
    
    //2. 重载“()”操作符来定义优先级
    /重载()
    struct myComp{
        bool operator () (const int &a,const int& b){
    		//由小到大
            return a>b;
        }
    };
    //定义优先队列,显式说明内部结构是vector
    //priority_queue<int,vector<int>,myComp> pq;
    
STL的使用
stack的使用

判断一个含有(), [],{} 3中类型的表达式中所有的括号是否匹配

分析:所有的右括号都是和前面最近的左括号匹配

#include <iostream>
#include <stack>
using namespace std; 
// 判断str中的括号是否匹配
bool solve(string str){
    stack<char> st;
    int i = 0;
    while(i < str.length()){
		if(str[i] == '(' || str[i] == '{' || str[i] == '['){
			st.push(str[i]);
        }else if(str[i] == ')'){
            if(st.top() != '('){
				return false;
            }else{
                st.pop();
            }
        }else if(str[i] == '}'){
			if(st.top()!='{'){
                return false;
            }else{
				st.pop();
            }
    	}else if(str[i] == ']'){
        	if(st.top()!='['){
				return false;
            }else{
                st.pop();
            }
        }
    	i++;
    }
    
	if(st.empty()){
		return true;
    }else{
        return false;
    }
}
排序

对于list 容器中的元素可以使用成员函数sort()

对于数组或者vector等具有随机访问特定的容器可以使用STL算法sort()

内置数据类型排序

sort() 默认以less<T>小于关系函数作为关系函数实现递增排序。

为了实现递减排序需要调用<functional> 头文件中定义的greater类模板

// 递减排序
sort(myv.begin(),myv.end(),greater<int>()); 

less<T> ,greater<T> 均属于STL关系函数对象,分别支持对象之间的小于,大于比较,返回布尔值。

包含在functional头文件中

自定义数据类型排序
  • 重载 < 运算符,以实现按指定成员的递增或者递减排序

    // 递增
    bool operator <(const Stud& s) const {
        return no<s.no;
    }
    
  • 自定义关系函数,实现按照指定成员的递增或者递减排序

    重载() 运算符

    struct Cmp{
    	bool operator()(const Stud &s,const Stud&t) const{
            return s.no < t.no;
        }
    }
    
    sort(myv.begin(),myv.end(),Cmp()); // 使用Cmp中的()运算符进行排序
    
堆

可以采用STL的优先队列来实现堆

优先队列的优先级高低由队列中数据元素的关系函数确定 --> 确定关系

内置数据类型

默认使用less<T> 作为关系函数,值越大优先级越高

可以改为greater<T> 作为关系函数

自定义类型
  1. 在声明的结构体类型中重载<运算符,指定优先级
  2. 在声明结构体中重载 > 运算符,此时需要指定优先级队列的底层容器和greater<T>
  3. 自定义关系函数,需要重载() 运算符,也需要指定底层容器。
C++ STL 知识点总结 概述 简介 简单介绍:C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈等。 STL的一个重要特点就是数据结构和算法的分离。例如,STL中sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组。 STL另一个重要特性是它不是面向对象的,主要依赖于... 阅读详情

相关推荐

C++中的STL

C++中STL部分的内容,主要提供了一些同样的模板类和函数模板,详细结合代码对容器、算法、迭代器进行了例子讲解。

人工智能方向…… 2778

STL--string类中的substr()函数

substr()函数介绍

学无止境 2919

【c++20】CPP-20-STL-Cookbook 学习笔记

c++20

突围 759

【c++】:STL模板中string的使用

文章目录 STL简介 一.认识string 二.string中基本功能的使用 总结 STL简介 STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费

Sxy_wspsby的博客 1863

TMS320F280049C 学习笔记21 交叉开关 Crossbar (X-BAR)

简单介绍了X-BAR。

whyorwhnt的专栏 2万+

Charles 抓包工具下载安装及基础使用

本篇内容主讲关于Charles抓包工具,从下载安装以及配置信息,证书的下载安装以及PC端设置代理配置和移动端设备配置代理,阐述关于Charles抓包工具面板的基础使用以及如何进行抓包和设置断点,对于软件测试以及对抓包感兴趣的读者可以翻阅!感谢大家的支持!!!

灵魂学者的博客 2957

STL的部分函数用法

  string substr substr有2种用法: 假设:string s = "0123456789"; string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789" string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567" find //fi...

qq_40914533的博客 391

SRAM Bank数量配置:性能、面积与功耗的权衡指南

SRAM(静态随机存取存储器)是芯片设计中的关键存储单元,其Bank数量配置直接影响访问延迟、吞吐率、功耗和面积。Bank切分通过将存储阵列分区,缩短位线和字线延迟,从而提升性能,但会增加外围电路开销。合理配置Bank数量可优化PPA(性能、功耗、面积),在28nm和16nm工艺下,2个Bank通常是性价比最高的选择。本文基于实测数据,探讨不同场景下的Bank配置策略,帮助工程师避免常见误区,提升设计效率。

weixin_27230891的博客 179

算法-STL(C/C++)

STL主要由 container(容器)、algorithm(算法)和 iterator(迭代器)三大部分构成。容器用于存放数据对象(元素),算法用于操作容器中的数据对象。算法和容器之间的关系就是迭代器。容器、算法和迭代器称为STL的三大件。

L-China的博客 1977

拯救者R9000P-2021-AMD5800H黑苹果EFI配置与优化指南

本文详细介绍了在联想拯救者R9000P 2021款(搭载AMD锐龙7 5800H处理器)上安装和优化黑苹果系统的完整指南。内容涵盖EFI配置、OpenCore引导设置、关键驱动(如NootedRed核显驱动)的调整,以及安装后的性能调优与常见问题解决,旨在帮助开发者和极客用户在这款游戏本上搭建稳定可用的macOS开发环境。

weixin_29291069的博客 285

华为云CodeHub保姆级教程:从零开始,5分钟搞定本地代码上传(含常见报错解决)

本文提供华为云CodeHub的保姆级教程,从零开始5分钟完成本地代码上传,涵盖环境准备、仓库创建、远程连接及常见报错解决。特别适合新手开发者快速掌握Git命令与云端协作流程,确保代码安全高效上传。

weixin_30443075的博客 480

STL——substr

https://blog.youkuaiyun.com/ch_vaniteux/article/details/79247061 string str(tobeornottobe); string ptr; ptr = str.substr(4, 5); cout << ptr; 输出的结果是ornot 可以说,substr是一个给定起点和截取长度,截出字符串中一段的函数 如果sub...

weixin_30646505的博客 182

PyTorch实战(25)——使用PyTorch构建DQN模型

深度Q网络 (Deep Q-learning Network, DQN) 在强化学习领域取得了巨大的成功和广泛的应用,PyTorch 结合 gymnasium 库为我们提供了强大的工具,支持在各种强化学习环境中测试不同类型的深度强化学习模型。在本节中,我们使用 PyTorch 框架构建使用卷积神经网络架构的 DQN 模型,模型通过自主学习掌握 Atari 经典游戏《Pong》的操作策略,最终实现击败电脑对手的竞技目标。

盼小辉丶的博客 3445

探索《CPP-17-STL-cookbook》:C++17 STL实战指南

是一个面向C++开发者的开源项目,由xiaoweiChen创建并维护。该项目旨在帮助开发者深入理解和充分利用C++17标准模板库(STL),以提升编程效率和代码质量。它提供了一系列实例教程,涵盖了STL的核心组件,包括容器、迭代器、算法和函数对象等。

gitblog_00055的博客 904

SpringBoot整合LangChain4j实现RAG检索实战详解

本文介绍了使用LangChain4j框架在Java生态中构建RAG(检索增强生成)应用的最佳实践。作为最接近Python LangChain的Java实现,LangChain4j提供了文档解析、向量化存储到检索增强的全套组件,并与SpringBoot深度集成。文章通过电商智能客服场景,详细演示了从零搭建RAG系统的完整流程:包括使用PostgreSQL+pgvector作为生产级向量数据库、文档加载与向量化处理、声明式AI服务实现以及查询压缩、结果重排等进阶优化技巧。同时对比了内存模式与生产级向量库的差异,

分享AI、区块链技术及应用,未来已来 432

AI在保险产品定价优化中的创新应用

在当今保险市场中,准确合理的产品定价是保险公司实现可持续发展的关键因素之一。传统的保险产品定价主要基于经验数据和精算模型,但这种方式往往存在数据处理效率低、对复杂风险因素考虑不足等问题。本文的目的在于深入探讨AI技术如何在保险产品定价中进行创新应用,以提高定价的准确性、效率和灵活性,更好地满足市场需求和客户个性化需求。本文的范围涵盖了AI技术在保险产品定价各个环节的应用,包括风险评估、费率计算、产品设计等方面。同时,还会涉及到相关的核心算法、数学模型以及实际应用案例等内容。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 982

Cpp17-STL-Cookbook 开源项目教程

### 目录结构 ``` Cpp17-STL-Cookbook/ ├── Chapter01/ │ ├── Example1.cpp │ ├── Example2.cpp │ └── ... ├── Chapter02/ │ ├── Example1.cpp │ ├── Example2.cpp │ └── ... ├── ... ├── Chapter10/ │ ├

gitblog_00391的博客 423

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

c++之STL详解

万字长文带你深度了解c++STL

ltzoro的博客 7543

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C++中的STL】

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。

Z15255808023的博客 1万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cpp stl库有什么

cpp STL、Standard Template Library 算法和数据结构,如向量、链表、队列、栈。 C++ 标准模板库的核心: 容器(Containers)、算法(Algorithms)、迭代器(iterators)、仿函数、内存配置器、配接器 Free C/C++ Libraries, Source Code and Frameworks(thefreecountry.com) htt...

weixin_43172531的博客 425

【c++】STL简介

STL(Standard Template Library,标准模板库),是c++标准库的一个重要组成部分,它提供了一系列通用的类模板和函数,是一个包罗数据结构和算法的软件框架。STL的出现弥补了c++开发效率的不足,大大提高了程序的可复用性。

2301_80955819的博客 2442

modern_cpp_5-C++ STL container&iterator

文章目录C++ 容器 (Container)基本用法获得容器的长度判断容器是否为空获取最后一个数据清除成员什么情况下使用容器?常见容器`std::array``std::vector``std::map``std::unordered_map`Iterating over mapsMuch More about containerC++迭代器 (Iterators)STL Algorithms C++ 容器 (Container) 基本用法 获得容器的长度 我们在之前常常使用sizeof()获得数组的长度:

weixin_43721070的博客 1000

C++之STL前序

可以直接引入c语言头文件,虽然c语言中大多数头文件在c++中依然可以使用,但是推荐的方法是在c头文件之前加一个小写的c字母,然后去掉.h后缀,比如变为如果采用c语言方式考虑,相对来说就会比较复杂,因为c语言没有直接对字符串进行比如分割的函数,同时数据输入也比较麻烦,利用fgets来输入,输入之后怎么从一个字符串中分离出整数,不好整,你如果用getchar(),也不好做,比如输入456,getchar只会去得到4。而且在结构体里面,除了有变量之外,还可以有函数。

Pxx520Tangtian的博客 297

【C++ STL学习笔记】C++ STL基础

文章目录C++ STL是什么,有什么用?学STL能干什么?C++ STL的发展历程是怎样的?C++ STL版本有哪些?HP STLSGI STLSTLportPJ STLRouge Wave STL熟练使用STL标准库是每个C++程序员的必备技能!泛型是什么,C++泛型编程又是什么?C++ STL基本组成(6大组件+13个头文件)如何衡量一个算法的执行效率?GNU开源精神及其发展历程 C++ STL是什么,有什么用? 在已有 C++ 尤其是 C++ 模板的基础上,从本节开始,我们开始系统地学习 STL 标准

qq_41854911的博客 3071

C++中STL的使用

C++中的STL

2401_86416288的博客 739

【CPP】CPP的STL(前篇)

简单来说:CPP在有了模板之后,很多重复性质的代码就不需要自己手撕很多遍了,甚至说有前人做了一个库,把常见的算法,数据结构啥的放进库里面,这些数据结构,算法啥的全都采用了模板类和模板函数的形式,使得这个库里的代码复用率极高,况且写这个库的人都是大佬级别的大佬,效率也很不错,所以在CPP实际开发中,就不需要自己再造轮子了,调用这个库里的玩意就行STL目前有两个需要去学习的版本,一个是微软家的PJ版,一个是GCC(Linux)的SGI版,这俩调用的效果都是一样的,只是底层不一样,需要了解一下。

2302_79981653的博客 1441
上一篇: CGI通用网关接口
下一篇: Rust变量与数据类型
暴风雨中的白杨
博客等级 码龄6年 1070粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值