当前位置: 首页 > news >正文

C++11常见语法

目录

lambda 表达式

可变模板参数

C++11新类的默认函数

包装器

function

bind


lambda 表达式

  • lambda 表达式也是可调用对象,在C语言中就有函数指针,但是函数指针比较复杂。

  • 而在C++11之前,也有仿函数,使用仿函数,还需要再定义一个类,专门实现仿函数,所以还是比较麻烦。

  • 而 lambda 还是比较简单的。

下面看这一段代码

class fruit
{
public:fruit(string name, int price, int evaluate):_name(name),_price(price),_evaluate(evaluate){}
​bool operator<(fruit& f){return _price < f._price;}
​string _name;int _price;int _evaluate;
};
​
​
void test1()
{auto lamd = [](int x, int y)->int {return x + y; };vector<fruit> fruits{ {"香蕉", 10,9}, {"苹果", 13, 8}, {"葡萄", 16, 7}, {"梨",17,4}, {"榴莲", 50, 8}};sort(fruits.begin(), fruits.end());sort(fruits.begin(), fruits.end());sort(fruits.begin(), fruits.end());
}

这里如果排序的话,那么时不可以的,如果想排序除非重载比较函数,但是比较函数也只能重载一个。

其实还可以写仿函数,而如果我们像使用多个成员变量的比较也是比较方便的,下面看一下仿函数的处理方法。

class nameLess
{
public:bool operator()(fruit& f1, fruit& f2){return f1._name < f2._name;}
};
​
class priceLess
{
public:bool operator()(fruit& f1, fruit& f2){return f1._price < f2._price;}
};
​
class evaluateLess
{
public:bool operator()(fruit& f1, fruit& f2){return f1._evaluate < f2._evaluate;}
};
void test1()
{auto lamd = [](int x, int y)->int {return x + y; };vector<fruit> fruits{ {"香蕉", 10,9}, {"苹果", 13, 8}, {"葡萄", 160, 7}, {"梨",17,4}, {"榴莲", 50, 8}};sort(fruits.begin(), fruits.end(), nameLess());sort(fruits.begin(), fruits.end(), priceLess());sort(fruits.begin(), fruits.end(), evaluateLess());
}

下面只需要把该类的对象传过去,就可以调用仿函数了,其实还可以使用 lambda 表达式,首先看一下 lambda 表达式如果写

  • lambda 表达式没有类型,所以可以直接写 lambda 的对象

  • 而如果要定义的话,那么可以把类型定义为 auto

  • lambda 表达式里面的内容有四个主体:

    1. 捕捉列表

    2. 参数列表

    3. 返回值

    4. 函数体

  • auto lamd = [捕捉列表](参数列表)->返回值{函数体;};

    上面就是 lambda 表达式的定义,而该对象也可以直接用作可调用对象

void test1()
{auto lamd = [](int x, int y)->int {return x + y; };vector<fruit> fruits{ {"香蕉", 10,9}, {"苹果", 13, 8}, {"葡萄", 160, 7}, {"梨",17,4}, {"榴莲", 50, 8}};
​auto name_less = [](fruit& x, fruit& y)->bool {return x._name < y._name; };auto price_less = [](fruit& x, fruit& y)->bool {return x._price < y._price; };auto evaluate_less = [](fruit& x, fruit& y)->bool {return x._evaluate < y._evaluate; };
​sort(fruits.begin(), fruits.end(), name_less);sort(fruits.begin(), fruits.end(), price_less);sort(fruits.begin(), fruits.end(), evaluate_less);
}

上面就是调用使用 lambda 表达式来控制 sort 排序, lambda 比仿函数还是要容易一点

下面就仔细介绍一下 lambda 表达式

首先是参数列表:

  • 参数列表就是和正常函数一样,传参数的,所以这个参数列表和函数是一样的。

  • 如果没有参数的话,也是可以省略的。

返回值:

  • 返回值的声明是箭头(->) 后加 返回值类型

  • 但是返回值是可以不写的,因为可以自动推导,所以返回值是可以省略的

  • auto lamd = [](){};

捕捉列表:

  • 捕捉列表里面写的就是想要捕捉的值,如果不想再参数列表里面写的话,就可以写再捕捉列表里面。

  • 捕捉列表里面可以写的值:

    1. value: 也就是局部的变量都可以写

    2. &value:表示以引用的方式捕捉该变量

    3. =:还有=符号,表示将所有的局部变量都捕捉,不过捕捉的局部变量是不能修改的

    4. &:表示将所有的局部变量都以引用的方式捕捉

    5. 还可以混着写

函数体:

  • 函数体和函数是一样的,所以这里也不多介绍了

以值方式捕捉

int a = 10;
auto lamd = [a] {
​
};

以值方式捕捉的话,是不能被修改的

int a = 10;
auto lamd = [a] {a = 20;
};

上面这样写是会报错的,那么如果想要修改怎么办呢?

可以加 mutable 让值捕捉的可以被修改,但是值捕捉指数拷贝,所以修改也并不会影响原来的值

int a = 10;
auto lamd1 = [a]() mutable {a = 20;
};

但是如果要加 mutable 的时候,就不能省略参数列表了。

以引用捕捉的

    auto lamd2 = [&a] {a = 20;};

如果是以引用捕捉的话,是可以修改的

值捕捉所有的变量

    int b = 20;auto lamd2 = [=] {cout << a << endl;cout << b << endl;};

同样是以值捕捉的话,是不能修改的,而上面定义的变量 a 和 b 都可以被访问

引用捕捉所有的变量

    auto lamd2 = [&] {cout << ++a << endl;cout << b++ << endl;};

以引用捕捉的话,也可以访问所有的变量,同时也可以修改

混合使用

    auto lamd2 = [&, b] {cout << a << endl;cout << b << endl;};

这种混合使用也是可以的,但是不能是重复的,也就是继续捕捉 &b,如果是 = 的话,那么也就不能以值捕捉其他变量,同时也不能即 = 又 &。

可变模板参数

  • 可变模板参数和可变参数列表很相似

  • 而之前再C语言中见过的可变参数列表是 printf 和 scanf

下面看一下可变模板参数的使用:

template<class ...Args>
void func(Args ...args)
{
​
}
  • 上面就是声明一个可变模板参数类型的函数

  • 其中上面的 Args 就是函数包,再写的时候必须有 ... 三个点,而这三个点也表示模板参数的展开

  • Args 就是模板传过来的类型,也就是类似于 K/T/V 这种一样,只是一个名字,所有不一定叫 Args

template<class T>
void func(const T& val)
{cout << val << endl;
}
​
template<class T, class ...Args>
void func(const T& val, Args ...args)
{cout << val << endl;func(args...);
}
​
void test2()
{func(1, 2.5, string("hello world"));
}

这里写一个可以打印可变参数列表的一个函数:

  • 首先是 func 函数里面传入了三个值,一个值传到了 T, 另外的值传到了参数包里面

  • func 函数打印第一个值,然后将参数包中的值递归式的调用自己没传给自己,这样就可以实现打印

  • 但是这里需要一个截至函数,也就是只剩下一个的时候,那么就是递归结束的条件

可变模板参数的应用不过如此,还有其他的用处。

看下面这一段代码:

class Date
{
public:Date(int year, int month, int day):_year(year),_month(month),_day(day){}
​void print(){cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year = 1;int _month = 1;int _day = 1;
};
​
template<class ...Args>
Date* Create(Args ...args)
{return new Date(args...);
}
​
void test3()
{Date* ret = Create(2001, 10, 10);ret->print();
}

上面 test 函数调用 Create 函数, Cretare 函数是可变模板参数,所以可以传任意类型个数的值,这里传入三个整型,然后让 Create 函数调用 Date的构造函数,然后构造一个 date 对象。

实际上,还可以直接传入 date 对象

void test3()
{Date* d1 = Create(2001, 10, 10);d1->print();
​Date* d2 = Create(*d1);d2->print();
}

这里将 d1 解引用后传入到 Create 函数中,由于是可变模板参数,所以可以接受任意类型个数的参数,所以这里将 d1 传入后调用Date 的拷贝构造函数,然后拷贝构造一个 d2

结果:

2001-10-10
2001-10-10

介绍完这个之后,可以看一下C++11 里面 stl 容器里面的 emplace 接口:

template <class... Args>void emplace_back (Args&&... args);

那么它就是利用了模板的可变参数,如果 args 是一个插入的对象的参数,那么就该函数就调用 new 对应的节点构造函数,或者是拷贝构造,如果直接是对象的话,那么就是拷贝构造(但是如果写了移动构造,就有可能是移动构造),如果是参数的话,那么就是构造函数

看下面代码:

void test4()
{list<pair<int, int>> lp;lp.emplace_back(10, 10);lp.emplace_back(make_pair(20, 20));
}

上面代码里面第一次调用emplace_back 是传的是参数,所以会调用构造函数,而第二个会走移动构造。

C++11新类的默认函数

  • 有了上面的右值引用,实际上到C++11里面,多了两个默认函数。

  • 移动构造

  • 移动赋值

但是既然时默认函数,那么其默认时如何生成的,默认生成的又会做什么?

  • 其实移动构造和移动赋值的默认生成行为一样!

  • 对于移动构造来说,如果没有显示的写移动构造和移动赋值,并且还没有写拷贝构造、复制重载、析构函数,那么就会默认生成一个,默认生成的移动构造,会对内置成员变量进行浅拷贝,对于自定义类型会调用其移动构造,如果自定义类型没有移动构造,那么就会调用其拷贝构造。

  • 对于移动赋值来说,如果没有显示的写移动构造和移动赋值,并且还没有写拷贝构造、复制重载、析构函数,那么就会默认生成一个,默认生成的移动赋值,会对内置成员变量进行浅拷贝,对于自定义类型会调用其移动赋值,如果自定义类型没有移动赋值,那么就会调用其复值重载。

上面就是C++11新类的默认函数。

再C++11之前,默认函数就有6个,但是我们常用的只有4个,再加上C++11的两个,那么就是6个默认函数。

  • 默认构造函数:

  • 默认拷贝构造:

  • 默认复制重载:

  • 默认析构函数:

  • 默认移动构造:

  • 默认移动赋值:

包装器

function

这里先看这个函数:

template<class F, class T>
T Fun(F f, T val)
{static int count = 0;
​cout << (++count) << endl;cout << (&count) << endl;
​return f(val);
}
  • 该函数里面有一个 static 的 count 对象,如果时相同类型调用该函数的话,那么都使用的是一个 count.

  • 但是如果是不同的类型的话,那么这里的 count 和 count 的地址都是不同的。

  • 下面我们用三个可调用对象传给该函数,这三个对象的参数返回值都一样,只是里面的实现不同,我们能不能调用到同一个函数呢?

// 函数
double Func1(double val)
{return val / 10;
}
​
// 仿函数
class Func2
{
public:double operator()(double val){return val / 20;}
};
​
void test1()
{// lambda 表达式auto Func3 = [](double val) {return val / 30; };
​cout << Fun(Func1, 15) << endl<< endl;cout << Fun(Func2(), 15) << endl << endl;cout << Fun(Func3, 15) << endl << endl;
}
  • 这里我们分别由三个可调用对象来调用该函数:

  • 函数指针

  • 仿函数

  • lambda 表达式

结果:

1
00A7A140
1
​
1
00A7A144
0
​
1
00A7A148
0
  • 这里看到这里的地址和值基本都是不一样的。

  • 说明这三个函数都调用到了不同的函数。

  • 那么这三个函数的参数返回值都相同为什么调用不到同一个函数呢?

  • 因为他们的类型不相同。

  • 那么我们想要让他们调用到同一个函数怎么办?

  • 下面就看一下包装器,我们使用包装器,使他们的的类型都相同。

先看一下他的类型:

template <class Ret, class... Args> 
class function<Ret(Args...)>;
  • 这里的包装器使一个模板。

  • 他的参数好像模板的特化,而 Ret 表示的就是函数的返回值,而后面的参数包里面写的就是函数的参数。

  • 由于不知道函数由多少个参数,所以就使用可变模板参数。

下面我们将那三个函数都包装成相同的类型:

void test2()
{auto Func3 = [](double val) {return val / 30; };
​// 包装function<double(double)> fun1 = Func1;function<double(double)> fun2 = Func2();function<double(double)> fun3 = Func3;//       返回值   参数//现在这三个函数的类型相同,现在调用 Fun函数
​cout << Fun(fun1, 15) << endl << endl;cout << Fun(fun2, 15) << endl << endl;cout << Fun(fun3, 15) << endl << endl;
}

结果:

1
009FE4FC
1
​
2
009FE4FC
0
​
3
009FE4FC
0
  • 现在看到,这里的 count 的地址也一样了,并且我们对 count 加了三次。

bind

除了上面这样包装函数,那么我们还可以怎么做?

我们还可以将参数与位置绑定:

void test3()
{auto sub = [](double a, double b) {return a - b; };
​function<double(double, double)> sub1 = bind(sub, placeholders::_1, placeholders::_2);cout << sub1(10, 5) << endl;
}
  • 这里我们使用 bind 函数,bind 函数里面的第一个参数是想要绑定的函数。

  • 后面的参数是每个调用绑定函数的时候,按顺序传给绑定的函数。

  • 而这个 placeholder::x 这个表示给 sub1 传参时候的第几个参数,第一个参数就会 placeholders::1 的位置,同理第二个参数就会传给第二个。

下面看一下结果其实就明白了。

结果:

5

下面我们再换一下参数的位置:

void test3()
{auto sub = [](double a, double b) {return a - b; };
​function<double(double, double)> rsub = bind(sub, placeholders::_2, placeholders::_1);cout << rsub(10, 5) << endl;
}

结果:

-5

其实 bind 不光可以绑定参数的位置,还可以绑定固定的参数:

void test4()
{auto Fun = [](int a, int b, double rate) {return (a + b) * rate;};
​function<double(int, int)> fun1 = bind(Fun, placeholders::_1, placeholders::_2, 1.1);cout << fun1(10,20) << endl;
}
  • 这里将 1.1 固定的绑定再 rate 上。

结果:

33

那么这个有什么用呢?

  • 这个可以将特定参数与位置绑定,那么有一些函数经常需要传固定参数的函数,那么就可以使用 bind 减少我们传参。

  • 还可以实现打折,如果是 vip 的话,那么计算价钱的方式打折就更多一点,如果是普通用户,那么就是打折的话少一点。

  • 其实还可以有很多用处。

相关文章:

C++11常见语法

目录 lambda 表达式 可变模板参数 C11新类的默认函数 包装器 function bind lambda 表达式 lambda 表达式也是可调用对象&#xff0c;在C语言中就有函数指针&#xff0c;但是函数指针比较复杂。 而在C11之前&#xff0c;也有仿函数&#xff0c;使用仿函数&#xff0c;还…...

【数据分析】时间序列

UTC时间&#xff1a;时间戳是以格林威治时间1970年01月01日00时00分00秒为基准计算所经过时间的秒数&#xff0c;是一个浮点数。Python的内置模块time和datetime都可以对时间格式数据进行转换&#xff0c;如时间戳和时间字符串的相互转换。 报错记录&#xff1a;AR has been re…...

【图像算法相关知识点】

【图像算法工程师】 什么是图像处理&#xff1f; 图像处理是指对数字图像进行处理和分析&#xff0c;以达到特定的目的。例如&#xff0c;调整图像的颜色、对比度、亮度等参数&#xff0c;进行图像增强、去噪、分割、特征提取等操作&#xff0c;以及应用计算机视觉算法实现目标…...

竹云筑基,量子加密| 竹云携手国盾量子构建量子身份安全防护体系

9月23日-24日&#xff0c;2023量子产业大会在安徽合肥举行。作为量子科技领域行业盛会&#xff0c;2023年量子产业大会以“协同创新 量点未来”为主题&#xff0c;展示了前沿的量子信息技术、产业创新成果&#xff0c;并举办主旨论坛、量子科普讲座等系列专项活动。量子信息作为…...

数据结构P46(2-1~2-4)

2-1编写算法查找顺序表中值最小的结点&#xff0c;并删除该结点 #include <stdio.h> #include <stdlib.h> typedef int DataType; struct List {int Max;//最大元素 int n;//实际元素个数 DataType *elem;//首地址 }; typedef struct List*SeqList;//顺序表类型定…...

基于BERT模型进行文本处理(Python)

基于BERT模型进行文本处理(Python) 所有程序都由Python使用Spyder运行。 对于BERT&#xff0c;在运行之前&#xff0c;它需要安装一些环境。 首先&#xff0c;打开Spyder。其次&#xff0c;在控制台中单独放置要安装的&#xff1a; pip install transformers pip install tor…...

妙鸭相机功能代码复现

妙鸭相机功能代码复现 妙鸭相机主要实现人脸替换与人脸高清增强修复功能。可通过两种方式实现Roop和Lora模型。 RooP笔记 基础模型:inswapper_128.onnx 人脸分析模型:insightface 高清增强模型:gfpgan 大体流程为通过insightface检测出人脸,替换人脸,使用gfpgan对人…...

使用Java Spring Boot构建高效的爬虫应用

本文将介绍如何使用Java Spring Boot框架来构建高效的爬虫应用程序。通过使用Spring Boot和相关的依赖库&#xff0c;我们可以轻松地编写爬虫代码&#xff0c;并实现对指定网站的数据抓取和处理。本文将详细介绍使用Spring Boot和Jsoup库进行爬虫开发的步骤&#xff0c;并提供一…...

归并排序与非比较排序详解

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; &#x1f354;前言&#xff1a; 上篇博客我们讲解了非常重要的快速排序&#xff0c;相信大家已经学会了。最后我们再学习一种特殊的排序手法——归并排序。话不多说我们直接上菜。 目录 归并排序 基本思想 递归思路…...

第85步 时间序列建模实战:CNN回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍CNN回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrome i…...

【MATLAB源码-第36期】matlab基于BD,SVD,ZF,MMSE,MF,SLNR预编码的MIMO系统误码率分析。

1、算法描述 1. MIMO (多输入多输出)&#xff1a;这是一个无线通信系统中使用的技术&#xff0c;其中有多个发送和接收天线。通过同时发送和接收多个数据流&#xff0c;MIMO可以增加数据速率和系统容量&#xff0c;同时提高信号的可靠性。 2. BD (块对角化)&#xff1a;这是一…...

Uniapp 新手专用 抖音登录 获取用户头像、名称、openid、unionid、anonymous_openid、session_key

TC-dylogin 一定请选择 源码授权版 教程 第一步 将代码拷贝至您所需要的页面 该代码位置&#xff1a;pages/index.vue 第二步 修改appid和secret 第三步 获取appid和secret 获取appid和secret链接 注意事项 为了安全&#xff0c;我将默认的自己的appid和secret在云函数中删…...

openssl引擎开发踩坑小记

前言 在开发openssl引擎过程中&#xff0c;引擎莫名其妙的加载不上&#xff0c;错误如下图&#xff1a; 大概意思就是加载引擎动态库时失败了。 在网上一顿搜索后&#xff0c;也没找到想要的答案。 原因 许多引擎都是基于第三方动态库开发的&#xff0c;引擎本身在开发时&a…...

ubuntu 设置x11vnc服务

Ubuntu 18.04 设置x11vnc服务 自带的vino-server也可以用但是不好用&#xff0c;在ubuntu论坛上看见推荐的x11vnc&#xff08;ubuntu关于vnc的帮助页面&#xff09;&#xff0c;使用设置一下&#xff0c;结果发现有一些坑需要填&#xff0c;所以写下来方便下次使用 转载请说明…...

物理备份xtrabackup

物理备份&#xff1a; 直接复制数据库文件&#xff0c;适用于大型数据库环境&#xff0c;不受存储引擎的限制&#xff0c;但不能恢复到不同的MySQL版本。 1.完全备份-----完整备份&#xff1a; 每次都将所有数据&#xff08;不管自第一次备份以来有没有修改过&#xff09;&am…...

1.springcloudalibaba nacos2.2.3部署

前言 nacos是springcloudalibaba体系的注册中心&#xff0c;演示如何搭建最新稳定版本的linux搭建。 前置条件&#xff0c;安装好jdk1.8 一、二进制压缩包下载 1.1 下载压缩包 nacos下载 点击下载下载后得到二进制包如下 nacos-2.2.3.tar.gz二、安装步骤 2.1.解压二进制…...

Linux 查看是否安装memcached

telnet 127.0.0.1 11211这样的命令连接上memcache&#xff0c;然后直接输入stats就可以得到memcache服务器的版本 安装memcached &#xff1a; sudo apt-get install memcached...

设计模式14、命令模式 Command

解释说明&#xff1a;命令模式&#xff08;Command Pattern&#xff09;是一种数据驱动的设计模式&#xff0c;它属于行为型模式。请求以命令的形式包裹在对象中&#xff0c;并传递给调用对象。调用对象寻找可以处理该命令的合适对象&#xff0c;并把该命令传给相应的对象&…...

【Go】excelize库实现excel导入导出封装(一),自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头

前言 最近在学go操作excel&#xff0c;毕竟在web开发里&#xff0c;操作excel是非常非常常见的。这里我选择用 excelize 库来实现操作excel。 为了方便和通用&#xff0c;我们需要把导入导出进行封装&#xff0c;这样以后就可以很方便的拿来用&#xff0c;或者进行扩展。 我参…...

【开发篇】二十、SpringBoot整合RocketMQ

文章目录 1、整合2、消息的生产3、消费4、发送异步消息5、补充&#xff1a;安装RocketMQ 1、整合 首先导入起步依赖&#xff0c;RocketMQ的starter不是Spring维护的&#xff0c;这一点从starter的命名可以看出来&#xff08;不是spring-boot-starter-xxx&#xff0c;而是xxx-s…...

OpenCV实现求解单目相机位姿

单目相机通过对极约束来求解相机运动的位姿。参考了ORBSLAM中单目实现的代码&#xff0c;这里用opencv来实现最简单的位姿估计. mLeftImg cv::imread(lImg, cv::IMREAD_GRAYSCALE); mRightImg cv::imread(rImg, cv::IMREAD_GRAYSCALE); cv::Ptr<ORB> OrbLeftExtractor …...

深入解析PostgreSQL:命令和语法详解及使用指南

文章目录 摘要引言基本操作安装与配置连接和退出 数据库操作创建数据库删除数据库切换数据库 表操作创建表删除表插入数据查询数据更新数据删除数据 索引和约束创建索引创建约束 用户管理创建用户授权用户修改用户密码 备份和恢复备份数据库恢复数据库 高级特性结语参考文献 摘…...

Elasticsearch数据搜索原理

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎&#xff0c;设计用于云计算环境中&#xff0c;能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性&#xff0c;可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…...

vue模版语法-{{}}/v-text/v-html/v-once

一、{{}}双括号&#xff1a;用于文本渲染 1、 {{变量名}}:data中返回对象的变量名 2、{{js表达式}}:可以直接进行js表达式处理 3、注意&#xff1a;双大括号中不要写等式书写 二、v-text 指令&#xff0c;用于文本渲染 1、为了解决双大括号渲染数据出现闪烁问题 三、v-cloak …...

前端埋点上传

没事看看&#xff1a; 从用户行为到数据&#xff1a;数据采集全景解析 | 人人都是产品经理 搭建前端监控&#xff0c;采集用户行为的 N 种姿势-前端监控设备 创业公司做数据分析&#xff08;三&#xff09;用户行为数据采集系统-CSDN博客...

第11章 Redis(一)

11.1 谈谈你对Redis的理解 难度:★★★ 重点:★★ 白话解析 对Redis的理解无非从三个方面去说一说:背景,是什么,特性。 背景:数据直接存磁盘太慢了,虽然MySQL用到了BufferPool等缓存,但是为了保证数据不丢失,MySQL采用的RedoLog依然要直接写磁盘。所以,数据的存储就…...

freertos信号量之二值信号量

freertos信号量之二值信号量 简介例程 简介 FreeRTOS的二值信号量&#xff08;Binary Semaphore&#xff09;是用于实现进程间同步和临界资源保护的重要工具。以下是一些二值信号量的常用函数及其说明&#xff1a; 1&#xff09;xSemaphoreCreateBinary() 创建一个二值信号量…...

notepad++ 如何去除换行

选中下方的“扩展” “查找目标”输入&#xff1a;\r\n&#xff0c;替换为:空白 最后全部替换。...

PPT NO.2 ​插入透明校徽

插入透明校徽&#xff1a; ①先下载一个校徽&#xff1a; ​ ②用矢量网站转换一下&#xff0c;这个免费的&#xff0c;很多其他的要钱钱&#xff1a; 位图转矢量图,JPG转矢量,PNG转矢量,GIF转矢量,BMP转矢量 - 在线工具 - 字客网 (fontke.com) 转换完了如下&#xff1a; 打…...

Linux系统部署PostgreSQL 单机数据库

安装方式 1 安装包方式 &#xff08;Packages and Installers&#xff09; 支持的操作系统包括 liunxMacosWindowsBSDSolaris 2 源码安装 &#xff08;Source code&#xff09; 下载源码包 通过下载地址PostgreSQL: File Browser 可以看到有各个版本的源码目录 选择13.1…...

网站备案名字填写/鞍山seo公司

3. 使用Gauss消元法求解n元一次方程组的根, 举例&#xff0c;三元一次方程组&#xff1a; 0.729x10.81x20.9x30.6867 x1x2x30.8338 1.331x11.21x21.1x31 package chapter4;import java.util.Scanner;public class demo3 {public static void main(String[] args) {Scanner sc…...

手机模板网站制作/建网站建设

Linux时间概念 Linux的时间分两种&#xff1a;系统时间、硬件时间 在Linux运行过程中&#xff0c;系统时间和硬件时间以异步的方式运行&#xff0c;互不干扰。 硬件时间的运行&#xff0c;是靠Bios电池来维持&#xff0c;而系统时间&#xff0c;是用CPU tick来维持的。 在系统…...

徐州网站制作费用/北京seo优化多少钱

股市赢家十大铁律&#xff1a;不求完美 只求收获2009-04-08 15:10股市中有无数先行者&#xff0c;他们的成败得失&#xff0c;值得后来者总结与借鉴。而其中的规律&#xff0c;对指导我们今后的投资&#xff0c;是大有裨益的。一、以"我"为主&#xff0c;培养自己独立…...

建设银行遵义分行网站/网站流量统计工具

.new、delete、malloc、free关系 delete会调用对象的析构函数,和new对应free只会释放内存&#xff0c;new调用构造函数。malloc与free是C/C语言的标准库函数&#xff0c;new/delete是C的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言&#xff0c;…...

写小说赚钱的网站/如何在百度搜索排名靠前

一、现象&#xff1a;直接用的方式把一个对象赋值给另一个对象&#xff0c;会导致修改新对象时&#xff0c;原对象也发生变化 var obj1 {name: 1111}; var obj2 obj1; obj2.name 2222; console.log(obj1.name); //2222 二、原因&#xff1a;JavaScript 中对象的赋值是默认引…...

网站建设收费标准不一/优化设计三年级上册答案语文

题目&#xff1a; 输入格式: 每个输入包含一个测试用例&#xff0c;第1行输入N&#xff08;1≤N≤100&#xff09;和M&#xff08;≥0&#xff09;&#xff1b;第2行输入N个整数&#xff0c;之间用空格分隔。 输出格式: 在一行中输出循环右移M位以后的整数序列&#xff0c;之…...