C++常用函数
std::sort
std::sort 函数用于对数组或容器进行排序,可以按照默认的升序排序或指定比较函数进行排序。
语法如下:
template <class RandomAccessIterator>
void sort(RandomAccessIterator first, RandomAccessIterator last);template <class RandomAccessIterator, class Compare>
void sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
- first:待排序元素的起始地址。
- last:待排序元素的终止地址,不包含在排序范围内。
- comp:可选参数,比较函数对象。
示例代码如下:
#include <iostream>
#include <algorithm>int main() {int arr[] = {4, 1, 8, 3, 2, 5};int n = sizeof(arr) / sizeof(int);std::sort(arr, arr + n); // 对数组进行升序排序for (int i = 0; i < n; i++) {std::cout << arr[i] << " ";}std::cout << std::endl;return 0;
}
输出结果为:
1 2 3 4 5 8
std::max 和 std::min
std::max 和 std::min 函数用于获取两个值中的最大值或最小值。
语法如下:
template <class T>
const T& max(const T& a, const T& b);template <class T, class Compare>
const T& max(const T& a, const T& b, Compare comp);template <class T>
const T& min(const T& a, const T& b);template <class T, class Compare>
const T& min(const T& a, const T& b, Compare comp);
- a:待比较的第一个值。
- b:待比较的第二个值。
- comp:可选参数,比较函数对象。
示例代码如下:
#include <iostream>
#include <algorithm>int main() {int a = 3, b = 5;int max_val = std::max(a, b); // 获取 a 和 b 中的最大值int min_val = std::min(a, b); // 获取 a 和 b 中的最小值std::cout << "max_val = " << max_val << std::endl;std::cout << "min_val = " << min_val << std::endl;return 0;
}
输出结果为:
max_val = 5
min_val = 3
std::binary_search
std::binary_search 函数用于在已排序的数组或容器中搜索元素,返回值为布尔类型。
语法如下:
template <class ForwardIterator, class T>
bool binary_search(ForwardIterator first, ForwardIterator last, const T& value);template <class ForwardIterator, class T, class Compare>
bool binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp);
- first:待搜索区间的起始地址。
- last:待搜索区间的终止地址,不包含在搜索范围内。
- value:待搜索的值。
- comp:可选参数,比较函数对象。
示例代码如下:
#include <iostream>
#include <algorithm>int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr) / sizeof(int);bool found = std::binary_search(arr, arr + n, 3); // 在数组中搜索值为 3 的元素if (found) {std::cout << "Found" << std::endl;} else {std::cout << "Not found" << std::endl;}return 0;
}
输出结果为:
Found
std::count
std::count 函数用于统计容器或数组中指定值的个数。
语法如下:
template <class InputIterator, class T>
typename iterator_traits<InputIterator>::difference_type count(InputIterator first, InputIterator last, const T& value);
- first:待统计区间的起始地址。
- last:待统计区间的终止地址,不包含在统计范围内。
- value:待统计的值。
示例代码如下:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 3, 3, 4, 5};int cnt = std::count(vec.begin(), vec.end(), 3); // 统计容器中值为 3 的元素个数std::cout << "count = " << cnt << std::endl;return 0;
}
输出结果为:
count = 3
std::accumulate
std::accumulate 函数用于计算容器或数组中所有元素的和,也可以指定一个初始值。
语法如下:
template <class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init);template <class InputIterator, class T, class BinaryOperation>
T accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);
- first:待求和区间的起始地址。
- last:待求和区间的终止地址,不包含在求和范围内。
- init:可选参数,求和的初始值。
- binary_op:可选参数,二元运算函数对象。
示例代码如下:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};int sum = std::accumulate(vec.begin(), vec.end(), 0); // 求和std::cout << "sum = " << sum << std::endl;return 0;
}
输出结果为:
sum = 15
std::for_each
std::for_each 函数用于对容器或数组中的每个元素执行指定的操作,可以使用函数指针或函数对象来指定操作。
语法如下:
template <class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn);
- first:待遍历区间的起始地址。
- last:待遍历区间的终止地址,不包含在遍历范围内。
- fn:函数指针或函数对象。
示例代码如下:
#include <iostream>
#include <algorithm>
#include <vector>void print(int x) {std::cout << x << " ";
}int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::for_each(vec.begin(), vec.end(), print); // 对容器中的每个元素执行 print 操作std::cout << std::endl;return 0;
}
输出结果为:
1 2 3 4 5
std::unique
std::unique 函数用于去除容器或数组中的重复元素,仅保留第一个出现的元素。
语法如下:
template <class ForwardIterator>
ForwardIterator unique(ForwardIterator first, ForwardIterator last);template <class ForwardIterator, class BinaryPredicate>
ForwardIterator unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred);
- first:待去重区间的起始地址。
- last:待去重区间的终止地址,不包含在去重范围内。
- pred:可选参数,二元谓词函数对象。
示例代码如下:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 3, 4, 4, 5};auto last = std::unique(vec.begin(), vec.end()); // 去除容器中的重复元素vec.erase(last, vec.end()); // 删除重复的元素for (auto x : vec) {std::cout << x << " ";}std::cout << std::endl;return 0;
}
输出结果为:
1 2 3 4 5
std::reverse
std::reverse 函数用于将容器或数组中的元素进行反转。
语法如下:
template <class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last);
- first:待反转区间的起始地址。
- last:待反转区间的终止地址,不包含在反转范围内。
示例代码如下:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::reverse(vec.begin(), vec.end()); // 反转容器中的元素for (auto x : vec) {std::cout << x << " ";}std::cout << std::endl;return 0;
}
输出结果为:
5 4 3 2 1
std::fill
std::fill 函数用于将指定区间的元素赋值为指定的值。
语法如下:
template <class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& value);
- first:要填充的第一个元素的迭代器。
- last:要填充的最后一个元素的迭代器,不包括在范围内。
- value:要填充的值。
示例代码如下:
#include <iostream>
#include <algorithm>
#include <vector>int main() {std::vector<int> vec(10); // 创建一个包含 10 个元素的向量std::fill(vec.begin(), vec.end(), 3); // 将向量中的所有元素都赋值为 3for (auto x : vec) {std::cout << x << " ";}std::cout << std::endl;return 0;
}
输出结果为:
3 3 3 3 3 3 3 3 3 3
另外需要注意的是,如果使用 fill 函数填充的元素是自定义类型,需要自行定义该类型的赋值运算符重载函数。
std::next_permutation
std::next_permutation 函数用于求出容器或数组中元素的下一个排列组合。
std::next_permutation 是`cpp 标准库中的一个函数,用于返回一组元素的下一个排列。下面是该函数的定义:
template<class BidirIt>
bool next_permutation(BidirIt first, BidirIt last);
该函数接受两个迭代器作为参数,表示需要进行排列的元素范围。
函数会尝试将这些元素重新排列为下一个字典序更大的排列,如果成功,则返回 true,否则返回 false。
下面是一个示例:
#include <iostream>
#include <algorithm>
#include <vector>int main()
{std::vector<int> vec{1, 2, 3};do {for (auto i : vec) {std::cout << i << ' ';}std::cout << '\n';} while (std::next_permutation(vec.begin(), vec.end()));return 0;
}
输出为:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
在这个示例中,我们使用了 std::next_permutation 函数对 vec 进行了排列,并使用了一个 do-while 循环来重复输出排列结果,直到排列到了最后一个排列为止。
std::partition
std::partition 函数用于将容器或数组中的元素按照指定的条件进行分区,使得满足条件的元素排在不满足条件的元素之前。
std::partition是一个标准库函数,可以将一组元素重新排序,使得满足某个特定条件的元素在序列的前面,而不满足条件的元素在后面。该函数接受三个参数:
template <typename ForwardIt, typename UnaryPredicate>
ForwardIt partition(ForwardIt first, ForwardIt last, UnaryPredicate p);
第一个参数是指向第一个元素的迭代器,第二个参数是指向最后一个元素后面的迭代器(即last不在范围内),第三个参数是一个一元谓词(即只接受一个参数的函数对象)。
使用该函数时,需要提供一个一元谓词,该谓词定义了一个条件,使得满足该条件的元素在序列的前面,而不满足条件的元素在后面。函数返回一个迭代器,该迭代器指向最后一个满足条件的元素后面的位置。在返回的迭代器之前的元素都满足条件,而在迭代器之后的元素都不满足条件。
下面是一个使用std::partition函数的示例代码:
#include <algorithm>
#include <iostream>
#include <vector>int main() {std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};auto is_odd = [](int x) { return x % 2 == 1; };auto it = std::partition(v.begin(), v.end(), is_odd);std::cout << "Odd numbers: ";std::copy(v.begin(), it, std::ostream_iterator<int>(std::cout, " "));std::cout << "\nEven numbers: ";std::copy(it, v.end(), std::ostream_iterator<int>(std::cout, " "));std::cout << std::endl;return 0;
}
该代码使用了lambda表达式is_odd作为一元谓词,该谓词返回true表示元素是奇数,返回false表示元素是偶数。函数将一个包含1到9的整数序列重新排序,使得奇数在前面,偶数在后面,并打印出结果
输出结果为:
Odd numbers: 1 3 5 7 9
Even numbers: 2 4 6 8
可以看到,std::partition函数将奇数放在了序列的前面,偶数放在了后面。返回的迭代器it指向序列中最后一个奇数的后面一个位置。函数std::copy将奇数和偶数分别打印出来。
注:lambda表达式`cpp11中新增的特性:
`cpp11中,可以使用lambda表达式来定义一个匿名函数,语法格式如下:
[capture list] (parameters) -> return-type { function body }
其中,capture list 用于捕获外部变量,parameters 是函数的参数列表,return-type 是函数的返回类型(可以省略,由编译器自动推断),function body 是函数体
以下是一个简单的示例,演示如何使用lambda表达式来计算两个整数的和:
#include <iostream>int main() {int a = 5, b = 3;auto sum = [](int x, int y) -> int { return x + y; };std::cout << "The sum of " << a << " and " << b << " is " << sum(a, b) << std::endl;return 0;
}
在上面的示例中,我们使用lambda表达式定义了一个函数sum,它接受两个int类型的参数并返回它们的和。我们将该lambda表达式赋值给变量sum,并通过调用该变量来调用该函数。
capture list是lambda表达式中的一个可选项,它允许我们在函数体中捕获外部变量。
外部变量:在函数体外部定义的变量,可以是全局变量,也可以是局部变量。(捕获外部变量的主要原因是 lambda 表达式是一个匿名函数,它没有自己的名称和作用域,因此无法像常规函数那样直接访问外部作用域中的变量。通过捕获外部变量,lambda 表达式可以获得对这些变量的访问权,使其能够在函数体中使用这些变量。)
捕获可以按值或按引用进行,这决定了 lambda 表达式如何访问外部变量。按值捕获将外部变量的值复制到 lambda 表达式的闭包中,这意味着 lambda 表达式不会影响外部变量的值。按引用捕获将外部变量的引用传递给 lambda 表达式,这意味着 lambda 表达式可以更改外部变量的值。
例如,我们可以使用以下lambda表达式来将一个整数加上一个固定的值:
#include <iostream>int main() {int a = 5, b = 3;int offset = 10;auto add_offset = [offset](int x) -> int { return x + offset; };std::cout << "The result of adding " << offset << " to " << a << " is " << add_offset(a) << std::endl;std::cout << "The result of adding " << offset << " to " << b << " is " << add_offset(b) << std::endl;return 0;
}
在上面的示例中,我们使用capture list来捕获变量offset,并在lambda表达式中使用该变量。这样,我们就可以使用该lambda表达式来将任何整数加上偏移量offset。
当然,你可以将变量作为参数直接传递给 lambda 表达式,但这种方式通常适用于较简单的场景。在某些情况下,捕获外部变量可以更方便地访问外部作用域中的变量,并允许 lambda 表达式使用外部变量的状态来执行更复杂的操作。
以上是 algorithm 头文件中最常用的函数及其使用方法,当然这只是其中的一部分,algorithm 头文件中还有很多其他的函数,读者可以通过查看 algorithm 头文件的文档来了解更多。
相关文章:
C++常用函数
std::sort std::sort 函数用于对数组或容器进行排序,可以按照默认的升序排序或指定比较函数进行排序。 语法如下: template <class RandomAccessIterator> void sort(RandomAccessIterator first, RandomAccessIterator last);template <clas…...
Android Framework基础到深入篇
Android Framework基础到深入篇 KernelSU Android上基于内核的Root方案 Android系统源码下载/编译篇...
【Go进阶训练营】聊一下go的gc原理
背景 正好周末时间,就打算梳理以下自己对go gc的理解。跳出语言层面来说,gc分为两种,一种是手动创建,手动销毁。另一种就是由自动分配自动销毁,前者就是c,c的代表,后者就是java,go。 而整个流程…...
英飞凌Tricore原理及应用介绍05_中断处理之中断路由(IR)模块详解
目录 1.概述1.1相关缩写2 TC3xx中IR特性介绍3.SRN(中断服务请求优先级)3.1 寄存器中的各Bit位讲解3.2 如何改变SRN配置4. 实际应用介绍4.1 如何利用SRC寄存器检查OS中断配置是否正确?1.概述 在Tricore架构中允许有多个中断源包括片上外设及外部中断世间产生的中断请求,以打…...
微搭问答002-移动端上传的文件如何在PC端下载
遇到一个问题,就是上传的图片,在手机上可以下载了,但在电脑上怎么下载到电脑 里,包括上传的文件 点击查看页面就可以吧,在企业工作台里 我做了查看页面,小程序可以,但H5和电脑页面不行 你创建一…...
初识JVM
目录 引言 JVM是什么? JVM和java有什么联系? JDK、JRE、JVM有什么区别 为什么学习JVM? JVM——从内存管理开始 运行时数据区域 分区讲解 堆 方法区 程序计数器 本地技术栈 虚拟机栈 对象的创建 指针碰撞: 空闲列表…...
实践分享:Vue 项目如何迁移小程序
最近我们小组刚经历了将成熟的 HTML5 项目转换成小程序,并在app中运行的操作!记录下来分享给各位。 项目:将已有的 Vue 项目转为小程序, 在集成了FinClip SDK 的 App 中运行。 技术:uni-app、FinClip 两个注意事项&…...
JavaScript学习笔记(6.0)
JavaScript类 使用关键字class创建类。 始终添加constructor()方法 class ClassName{constructor(){...} } calss Car{constructor(name,year){this.namename;this.yearyear; } } 创建了一个名为Car的类,并且拥有两个初始属性name和year。 JavaScript类不是对…...
某小公司面试记录
记录一次面试过程,还有一些笔试题,挺简单的,排序,去重,this指向,深浅拷贝,微任务的执行顺序,变量提升等。 ES6数组新增的方法 Array.from: 将两类对象转为真正的数组&am…...
SPI读写SD卡速度有多快?
SD卡是一个嵌入式中非常常用的外设,可以用于存储一些大容量的数据。但用单片机读写SD卡速度一般都有限(对于高速SD卡,主要是受限于单片机本身的接口速度),在高速、实时数据存储时可能会有影响。但具体速度可以达到多少…...
MySQL:索引与事物
目录 简单了解索引的底层数据结构 索引的概念: 索引存在的意义: 索引的使用: 索引实现的数据结构 B树 B 树 B 树的特点 B 树的优势 事物 事物的概念 事物的使用 事物的四大特性 并发可能引起的问题 脏读问题 不可重复读 幻读…...
mybatis实战
目录配置自动下划线驼峰MyBatis解析的SQL和实际传参不符的问题传参是整型,结果是false日期比较入参是字符串入参是Date父子递归查询上下级查询方法一方法二传参数组inmapper中接口注解映射配置 自动下划线驼峰 使用mybatis的自动下划线驼峰转换 mybatis有一个选项…...
【UEFI实战】BIOS与IPMI
KCS KCS全称是Keyboard Controller Style,关于这个名称不用过多的追究,只需要知道它是系统(BIOS和OS)和BMC通信的一种基本方式即可。本文将介绍BIOS下的KCS接口,包括接口使用方式和数据。内容参考自《ipmi-second-gen…...
90%的人都不算会网络安全,这才是真正的白帽子技术【红队】
我敢说,现在网上90%的文章都没有把网络安全该学的东西讲清楚。 为什么?因为全网更多的都是在讲如何去渗透和公鸡,却没有把网安最注重的防御讲明白。 老话说得好:“攻击,是为了更好的防御。”如果连初衷都忘了&#x…...
关于vuex的使用
1.首先安装vuex npm install vuex --save 这时如果直接安装vuex,不指定版本的话,就会直接安装最新的vuex的版本。所以会出现报错。 报错就安装这个 npm install --save vuex3 2.创建文件夹, 有的时候安装好会自动创建vuex的文件夹 …...
第53篇-某商城sign参数分析-webpack【2023-03-07】
声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析三、完整代码一、前言 今天再来试一个webpack的例子吧,网址: aHR0cHM6Ly9tLnlxYi5jb20vYmFuay9…...
探秘MySQL——排查与调优
文章目录一、问题排查一:SQL执行出错二、问题排查二:慢查询0.几个重要参数1.配置慢查询日志命令行配置(重启失效)修改配置文件(永久生效)2.查看慢查询日志3.问题排查1:Look_time耗时4.问题排查2…...
【9.数据页结构】
概述 InnoDB 的数据是按「数据页」为单位来读写的,也就是说,当需要读一条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。数据库的 I/O 操作的最小单位是页,InnoDB 数据页…...
演唱会总是抢不到票?教你用Python制作一个自动抢票脚本
人生苦短 我用python 这个大家应该都知道吧? 是中国综合类现场娱乐票务营销平台, 业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。 如何快速抢票? 那么, 今天带大家用Python来制作一个自动抢票的脚本小程序 本文源码python安…...
【系统开发】WebSocket + SpringBoot + Vue 搭建简易网页聊天室
文章目录一、数据库搭建二、后端搭建2.1 引入关键依赖2.2 WebSocket配置类2.3 配置跨域2.4 发送消息的控制类三、前端搭建3.1 自定义文件websocket.js3.2 main.js中全局引入websocket3.3 App.vue中声明websocket对象3.4 聊天室界面.vue3.5 最终效果一、数据库搭建 很简单的一个…...
Learning C++ No.14【STL No.4】
引言: 北京时间:2023/3/9/12:58,下午两点有课,现在先把引言给搞定,这样就能激励我更早的把这篇博客给写完了,万事开头难这句话还是很有道理的,刚好利用现在昏昏欲睡的时候,把这个没…...
高速PCB设计指南(八)
七、产品内部的电磁兼容性设计 1 印刷电路板设计中的电磁兼容性 1.1 印刷线路板中的公共阻抗耦合问题 数字地与模拟地分开,地线加宽。 1.2 印刷线路板的布局 ※对高速、中速和低速混用时,注意不同的布局区域。 ※对低模拟电路和数字逻辑要分离。…...
什么是腾讯云关系型数据库(MySQL/SQL Server/MariaDB/PostgreSQL详解)
什么是腾讯云关系型数据库?腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL详细介绍。腾讯云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。腾讯云关系型数据库提供 MySQL、SQL…...
进程通信相关概念
一、概念 1.1 通信方式有哪些 管道:水管,男纸条放入水管,女看了拿走不回复 消息队列:大盒子,男放入纸条,女看了不拿走,男女都可放 共享内存:直接桌子,男放桌上&#…...
05.Java的运算符
1.运算符计算机的最基本的用途之一就是执行数学运算,比如:int a 10;int b 20;a b;a < b;上述 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Ja…...
轮转数组(力扣189)
轮转数组 题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7…...
主流的“对象转换工具”使用示例大全以及性能的对比
目录 前言 源码地址 代码示例 引入依赖 先定两个实体用于转换 定义一个接口让所有转换器都集成 Apache BeanUtils BeanCopier bean-mapping bean-mapping-asm Dozer 自己写get/set JMapper json2json MapStruct(推荐) ModelMapper OriK…...
分享10个不错的C语言开源项目
今天跟大家分享10个重量级的C语言开源项目,C语言确实经得住考验: Redis:Redis是一个开源的高性能的键值对数据库。它以C语言编写,具有极高的性能和可靠性。 Nginx:Nginx是一个高性能的HTTP和反向代理服务器࿰…...
【阅读笔记】JavaScript设计模式与开发实践2--闭包与单例、策略模式
目录闭包与高阶函数Function 扩展函数柯里化函数单例模式透明的单例模式惰性单例策略模式策略模式发展策略模式实现闭包与高阶函数 Array.prototype.sort 接受一个函数当作参数,用户可以自行在该函数内指定排序方式 // 由小到大排序 let res [1, 4, 2].sort((a, …...
设计模式(二十)----行为型模式之责任链模式
1、概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同…...
网站logo在哪里/seo超级外链
GridFS的原理是将大文件分割为多个比较大的块,将每个块作为独立的文档进行存储。(1)GridFS中的块会被存贮到专用的集合中,默认为fs.chunks;(2)除了将文件的每一个块单独存储外,还需要将每个文件…...
wordpress标题前缀/360竞价推广怎么做
在nodejs爬虫程序的时候突然出现这个错误,之前一切正常: Error: getaddrinfo EAI_AGAIN www.xxx.com:80 找了很久的程序错误,都没发现问题,结果发现是因为原网站更改域名了。。更改域名。。 把抓取的地址改为新地址一切就好了。…...
wordpress创建配置文件/活动推广方式都有哪些
258. Add Digits Digit root 数根问题 /*** param {number} num* return {number}*/ var addDigits function(num) {var b (num-1) % 9 1 ;return b; };//之所以num要-1再1;是因为特殊情况下:当num是9的倍数时,09的数字根和0的数字根不同。 性质说明 …...
无锡快速建设网站方法/百度网站推广一年多少钱
• 向指定的txt文件中写入键盘输入的内容,然后再重新读取该文件的内容,显示到控制台上。 • 键盘录入5个学生信息(姓名, 成绩),按照成绩从高到低存入文本文件。 package 复习第七章作业第四答题;import java.io.*; import java.util.*;publ…...
公司网站建设价格/阿里云域名注册官网
前言 纵观神经网络的发展历程,从最原始的MLP,到CNN,到RNN,到LSTM,GRU,再到现在的Attention机制,人们不断的在网络里面加入一些先验知识,使得网络不过于“发散”,能够朝着人们希望的…...
wordpress付款插件/苏州网站seo服务
Linux文件系统结构 Linux目录结构的组织形式和Windows有很大的不同。首先Linux没有“盘(C盘、D盘、E盘)”的概念。已经建立文件系统的硬盘分区被挂载到某一个目录下,用户通过操作目录来实现磁盘读写。 Linux不像Windows那样的系统目录,Linux使用正斜杠&q…...