Pascal 转 C++ 教程1

转自 https://blog.wind-flower.cn/2018/08/06/%E6%95%99%E7%A8%8B1/

C++ 程序结构、数据结构、语法、函数

一个标准的C++程序:

    #include <cstdio>#define maxn 1000   // 预处理指令using namespace std;int a[maxn];        // maxn被替换为1000int main() {        // 主函数int n;scanf("%d", &n);for (int i = 0; i < n; i ++)scanf("%d", &a[i]);for (int i = 0; i < n; i ++)printf("%d\n", a[i]);return 0;}

语法

花括号和分号

{相当于Pascal中的begin,}相当于Pascal中的end,语句和Pascal语言一样用;分隔,一般一行写一条语句。

注释

C++中有两种方法使用注释(不编译的内容)。
//后到行尾的内容为注释(和Pascal中的//一样)。
/**/中间的内容为注释,相当于Pascal中的{和}。

预处理指令(#开头)

头文件(#include)
宏定义(#define)

头文件

OI竞赛中会用到的标准头文件有两类:继承自C的头文件STL头文件。C的头文件一般以c开头,例如前面的cstdio

OI竞赛中可能会用到的头文件

  • cstdio:包含读入输出相关函数,可以记为c+std(standard)+io(input&output)。一般来说这个头文件必然要包含。
  • cstring:包含C-style字符串相关的函数。
  • cmath:包含数学相关的函数。
  • cstdlib:包括随机函数等。
  • ctime:获取时间当做随机函数的种子。
  • STL头文件:后面会详细介绍STL。

主函数

和Pascal中的主程序一样,是程序开始执行的地方。不同的地方是C++的主函数有返回值,类型为int,并且正常结束时应该返回0。
在其他函数中,也可以用cstdlib头文件中的函数exit(0)直接退出整个程序,其中的参数0表示的就是主函数返回值。

基本类型

  • 整型
  • 实型
  • 字符型
  • 布尔型

带符号整型

int、short、long、long long

  • intlong为32位带符号整型(Pascal中的longint),范围是-2^31~2^31-1
  • short为16位带符号整型(Pascal中的integer),范围是-2^15~2^15-1
  • long long为64位带符号整型(Pascal中的int64),范围是-2^63~2^63-1
  • int的最大值约为2.1×109,为首选整型类型。

无符号整型

在对应的带符号整型前面加上unsigned,也就是unsigned int、unsigned short、unsigned long、unsigned long long。其中unsigned int可以直接写为unsigned
无符号整型不能存储负数,但存储的最大值可以扩大一倍,例如unsigned的范围就是0~2^32-1。

实型、字符型和布尔型

  • C++中有floatdoublelong double三种实型,精度依次递增,一般使用double
  • char类型只能存储字符,计算机内部是用ASCII码表示字符的,实际的范围是0~255。字符常量使用单引号包围的。
  • bool型只能为truefalse

各种类型占用的字节数

  • 1字节:char、bool
  • 2字节:short、unsigned short
  • 4字节:int、unsigned、long、unsigned long、float
  • 8字节:long long、unsigned long long、double
  • 12字节:long double

各种类型的常量

  • int类型的常量:2、100等(不需要任何后缀)
  • double类型的常量:0.0、1.5、1e50等
  • char类型的常量:’a’、’d’等(将字符夹在单引号间)
  • bool类型的常量:true和false
  • unsigned类型的常量:50u、50U(在非负整数后加上u或U后缀)
  • long long类型的常量:1000ll、1000LL

其他进制的整型常量

  • 十六进制前加0x前缀,例如0x100f、0x100F(大写小写均可)。
  • 八进制前加0前缀,例如0144,它表示八进制的144,十进制的值是100。因此不要随便加多余的零,防止被当做八进制处理。

转义字符

某些特殊的字符可以用转义的方法表示。转义字符以反斜杠()开头,例如\n。下面是比较常见的五种转义字符:

  • \n 换行
  • \\ 反斜杠
  • \? 问号
  • \' 单引号
  • \" 双引号

定义基本类型的变量

  • 定义变量的方式为类型名+变量名:
    • int x1, y1;
    • char x2, y2;
    • double x3, y3;
    • bool x4, y4;
  • 定义变量时也可以直接指定初值:
    • int a = 10;
    • char b = ‘p’;
    • double c = 1.2;
    • long long d = 1000LL;
    • bool e = true;
  • 定义基本类型的变量
    • C++语言几乎可以在程序的任何地方定义变量,但定义的变量只有在定义之后才能使用,如果在定义处之前就使用会给出编译错误。

隐式类型转换

  • 假如将A类型的变量或常量赋值给B类型的变量,A类型就会被隐式地转换为B类型。
  • 两个不同类型进行二元运算时,小类型也会被隐式转换成大类型以便运算。
    int a = 100;long long b = a;// int类型的a被隐式转换为long long类型后赋值给bdouble x = 1.5;int y = 10;double z = x * y;// int类型的y被隐式转换为double类型后和x相乘

显式类型转换

  • 除了隐式类型转换,在需要的时候,我们也可以显式地对变量的类型进行转换。其实我也比较推荐大家尽量使用显式类型转换,这样可以避免某些可能的错误。显示转换的方法是(type)x,其中type是要转换成的类型。假如后面要转换的是一个表达式,需要加上括号,即(type)(a+b),这是由于运算符优先级的问题,后面会再次提到。
    int a = 1000000000;long long b = (long long)a * a;
  • 这里int类型的a被显式转换成long long类型后和int类型的a相乘,由于相乘的两个类型不同,后面int类型的a会被隐式转换成long long类型后再与前面的a相乘。这里不进行显式类型转换的话,由于相乘的两个类型都是int,就会发生溢出,不过溢出这种错误运行时并不会报错。

基本类型间的转换

  • 实型->整型:去除小数部分,仅保留整数部分
  • 整型->实型:无变化,精度可能会损失
  • 整型<->字符型:ASCII码
  • 布尔型->整型:true变成1,false变成0
  • 整型->布尔型:0变成false,其他变成true
注意有些转换可能会溢出,例如unsigned->int,long long->int等
  • 由于有隐式类型转换,将数字字符转换成数字可以直接写成ch-‘0’,类似的还有ch-‘a’,其中ch表示数字字符或小写字母字符。
  • 假如要从大类型转换为小类型(如long long转换为int、double转换为int),因为精度可能会损失,建议使用显式类型转换提示自己。

指针类型

指针是指向特定类型内存地址的类型。C++中的&运算符可以取出某个变量在内存中的地址,以便赋值给相应的指针类型。后面讲运算符时还会介绍通过new的方式给指针赋值。空指针的值为0(也可以用NULL表示)。

    int a = 100;int *b = &a;// b是一个指向int类型的指针// 并且将它初始化为a变量的地址*b = *b * 2;// 相当于a变量被乘2int *c = 0; // c是一个空指针*c = *c * 2; // 运行到这条时会错误

引用类型

引用和指针有相似的地方,但更恰当的理解是给变量取别名。引用在定义时必须被恰当地初始化,并且之后就不能再修改成其他变量的别名。

    int a = 100;int &b = a;// b是一个int的引用类型// 并且它被初始化指向ab = b * 2;// 相当于a变量被乘2了
注意点
  • 引用指针类型指向的地址时,需要在指针变量名前加*,但引用是和普通变量一样直接使用。
  • 定义指针和引用变量时需注意,每一个指针或引用变量前都要加*&
    int *a, b, &c = b;// a是指向int的指针类型// b是普通的int类型// c是指向int的引用类型

const类型

和Pascal中一样,C++里也可以定义常量,适当地定义常量不仅方便编程,也能够使程序意义更明确

    const double pi = 3.141592653;const int inf = 1000000000;const char space = ' ';

常量定义后就不能够再修改,除了直接输入常量的值,也可以通过常量表达式定义常量。

    const double pi = acos(-1);const int inf = 10000 * 10000;

类型的别名

对于某些很长的类型名,可以通过typedef在使用类型之前取别名,例如:
typedef long long LL;
这样LL就可以直接表示long long类型了。
再例如:
typedef int* pint;
就可以用pint来表示指向int的指针了。

CPU的字长

  • CPU在单位时间内能一次处理的二进制数的位数。
  • 当前的CPU基本都支持64位字长,但由于操作系统是32位的,因此当前绝大多数64位CPU都运行在了32位字长的模式下。
  • C++中的int类型就是32位长的,也就是占用4字节(8个位为一个字节)。它和CPU的字长相同,可以获得最高的效率,是首选的整数类型。

原码、反码和补码

反码和补码是针对一个特定的原码来说的。反码就是将原码01取反,补码就是在反码的基础上再加1。
例如原码是00001111,反码就是11110000,补码就是11110001
计算机内部表示整数使用的是二进制的方法,但是int类型也可以为负整数,对于负整数,就需要用到反码和补码。
int类型总共有32位,其中第一位是符号位,假如为0就是非负整数,否则是负整数,后面31位用来记录数字的信息。下面为了方便叙述,将32位的整型简化为8位。
先考虑最高位是0的情况,那么这个数就是后面7位二进制表示的整数,例如(01010101)2=85。
继续考虑第二种情况:最高位为1。此时这个二进制用来表示一个负数,这个负数的绝对值就是相应补码表示的正整数。例如(10101010)2,先将所有位都取反,得到(01010101)2,再加上1得到(01010110)2=86。因此(10101010)2表示的整数是-86。
特别地,(11111111)2表示的是-1,(10000000)2表示的是-128。扩展到32位整数的话,全是1依然表示-1,第一位1后面全0表示-231。因此int类型能表示的最小值是-231,而不是-231+1。
最后的问题是为什么要用这种方式来表示负数?
大家可以自己验证一下,如果这样表示的话,加法减法时都无需考虑整数的符号,可以直接对二进制加减(第32位产生的进位需舍去),就能得到正确结果。
但如果运算结果超出了类型能表示的范围,由于最高位的进位被舍去,计算出来的结果就会发生错误,所以要根据题目的数据范围选择合适的整数类型,必要的时候还需要使用高精度。
还有特别需要注意,只有带符号的整型使用这种方式表示整数的,不带符号的整型是直接用二进制表示的(因为不需要表示负数)。

练习题1

    int a = 10;  // 正确const int b = a * 2;// 错误,常量必须是常量表达式int &c;// 错误,引用类型定义时必须初始化char *d = &a;// 错误,指针类型不匹配int x = 1000000000;  // 正确long long y = x * x;// 错误,没有进行显式类型转换,会导致溢出

练习题2

    int a = 0xffff;// 十六进制,a的值为65535int b = 0xffffffff;// 十六进制,注意二进制全1表示-1,因此b的值是-1[计算机字长为64位时`0xffffffffffffffff`=-1]double c = 3.141592653;int d = c, e = (int)c; // d和e的值都是3char f = 'e';int g = f - 'a'; // g的值是4double h = -1.2;int i = (int)h; // i的值是-1int &x = d, *y = &e;x ++; *y --; // d变成4,e变成2

运算

四则运算符、取模

+ - * /,这个大家都懂得对吧。其中/需要注意一下,如果相除的两个变量(常量)都是整型,就会进行整除操作,否则进行实数除法。C++中的取模操作符是%取模要求操作的两个类型都是整型

    int a = 10, b = 3;double c = 3.5;double d = a / c; // c是实型,因此是实型除法int e = a / b; // a,b都是整型,因此是整除double f = a / (double)b;// b被转换成实型,因此是实型除法int g = a / 4; // a和4都是整型,因此是整除double h = a / 4.0; // 4.0是实型,因此是实型除法

逻辑运算符

< > <= >= == != && || !
分别对应Pascal中的< > = <> and or not
到后面讲if语句时会具体举例
逻辑运算符两边的类型不同时,也会进行隐式类型转换
C++中的字符型(char)可以直接用在<、>、<=、>=、==、!=等逻辑比较中。例如a是char类型的变量,你可以用('a' <= a && a <= 'z')来判断a是否表示小写英文字母。

位运算

Pascal中也可以进行位运算,但是大家用的或许比较少。Pascal中的三种位运算是and or xor,C++中对应的运算符是&、|和^
位运算就是把整数转换为二进制后,每位进行相应的运算得到结果。* &只有当两个都为1时才为1,|只要两个中有一个1就是1,^只有当两个不同时才为1 *
例如:5=(101)2,6=(110)2,那么5&6=(100)2=4、5|6=(111)2=7、5^6=(011)2=3。
还有一类位运算是左移右移,Pascal中是shlshr,C++中是<<>>。左移右移的作用就是将二进制表示整体移动,并舍去不在范围内的部分。例如5<<1=(1010)2=10、5>>1=(10)2=2。实际上可以看出,左移k位相当于乘上2k,右移k位相当于整除2^k

&、|和&&、||

&和|是按位与和或,而&&和||是逻辑与和或,观察下面的程序片段:

    int a = 10, b = 0;int c1 = a & b, c2 = a && b;int d1 = a | b, d2 = a || b;

其中a&b是按位与,a&&b的话,因为逻辑与要求两个数都是bool类型,因此会将a和b隐式转换为bool类型,其中a被转换为true,b被转换为false,计算完了之后又会被隐式转换为int类型赋值给c2。
这样分析一下,c1、c2的值为0,d1的值为10,d2的值为1。

赋值运算符

赋值也是一种运算符,和Pascal中不同,C++中的赋值运算符是=,而不是:=。相应的,逻辑等于就是==,而不是=。这些细节在刚转C++的时候尤其要注意。
赋值还可以和二元运算符结合,例如a+=b就表示将a+b赋值给a。其他类似的运算符还有-=、*=、/=、%=、&=、|=、^=、<<=、>>=等。

表达式

C++中的表达式比Pascal中更广泛,表达式的主要特点就是它有“值”。
例如加法表达式a+b,它的值就是加法运算的结果。再例如逻辑表达式a>=b,它的值是逻辑运算的结果(true或false,也可以说0或1)。
更高级的还有x=y这样的赋值,它也算表达式,它的值就是x(或y)的值。诸如+=的赋值表达式的值为左边变量赋值后的值。
因为赋值也算作一种表达式,因此我们可以写出x=y=z这样的连赋值,要从右向左看这个表达式,它先把z的值赋值给y,再把y=z的值赋值给x,其实就是把z赋值给x和y。
在表达式后面加上分号就能成为一条语句。

++和–

自加自减可以简单地看成Pascal中的inc和dec函数,但是它们有一些区别,区别就在于前面说的表达式,自加和自减操作也有
自加和自减有两种形式:前缀后缀。假如x为int类型的变量,x++++x的含义是不同的,虽然都会将x加上1,但考虑下面的两个表达式:
y=x++和y=++x
第一个的话,是先执行y=x、再将x加上一,第二个是先将x加上一、再执行y=x。用表达式的值来理解的话,前缀++和–会返回操作过后的值,后缀++和–会返回操作之前的值。可以用“先用再加”和“先加再用”来形象记忆。

注意:++和–

++、–这两种运算符使用时需要很小心,有时会写出难以解释的表达式,例如:x = x / ++ x
按照运算符优先级,++高于/,因此先处理++ x运算。这里的问题是,除法两边都是x,第二个显然是加一后的x,但前面的x到底指加一前还是加一后呢?C++语法标准中认为这样的表达式有二义性,不同的编译器有可能给出不同的结果。因此在使用++和—运算符时要小心地避免这样的情况,要保证写出的表达式很容易被解释。基本上把握带有前缀后缀++或–的变量只在表达式中出现一次,就不会出现大问题了

逗号运算符

逗号可以分割多个表达式,并整体组成一个表达式,它的值为最后一个表达式的值,计算的时候按照从左到右的顺序。

    int a, b, c, d;// 这里是定义,和逗号表达式没关系d = (a = 10, b = 20, c = 30, a <= b && b <= c);// **由于逗号运算符的优先级比赋值低,所以最外面有括号**// 整个逗号表达式的值为a <= b && b <= c这个表达式的值,也就是1c = 100, d = 200;// 逗号表达式也可以简单起到将多个赋值合并为一条语句的作用

new和delete

new用来申请动态内存空间,返回值是一个指针。例如:
int *p = new int;
就会使p指向一个int类型。
对于动态申请的空间,可以用delete删除。也就是:
delete p;
注意delete操作并不会使p变为0,它只会清除p指向空间,最好下一句手动将0赋值给p(p=0)。

运算符优先级

排在前面的优先级较大,同一组的优先级相同

  • Group 1
    • ++、–:后缀自加自减
  • Group 2
    • !:逻辑否
    • ++、–:前缀自加自减
    • +、-:正负号
    • &:取地址
    • (type):显式类型转换
  • Group 3
    • *、/、%:乘法、除法、取模
  • Group 4
    • +、-:加法、减法
  • Group 5
    • <<、>>:按位左移、右移
  • Group 6
    • <、<=、>、>=:小于、小于等于、大于、大于等于
  • Group 7
    • ==、!=:逻辑等于、逻辑不等于
  • Group 8
    • &:按位与
  • Group 9
    • ^:按位异或
  • Group 10
    • |:按位或
  • Group 11
    • &&:逻辑与
  • Group 12
    • ||:逻辑或
  • Group 13
    • =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=:赋值运算符
  • Group 14

    • ,:逗号运算符

    大家特别需要注意的是,位运算运算符的优先级都比较低(低于加法和减法,有些低于逻辑比较运算符),使用的时候一定要加上适当的括号

练习题

    int a = 10, b = 3;int c = a / b;  // c的值为3double d = a / b;  // d的值仍然为3double e = (double)a / b;  // e的值为3.333……int f = a | b, g = a && b;// f的值为11,g的值为1int h = a + b >> 2;// >>优先级比+低,h的值为3int i = a ++;// i的值为10,a的值变为11int j = -- b;// j的值为2,b的值变为2

读入、输出

C语言中的读入输出函数

由于C++是C语言的扩展,因此可以使用C语言头文件中的函数。C语言中的读入函数是scanf,输出函数是printf,它们都是从屏幕读入输出。
这两个函数都是先传入一个格式字符串,再给出要读入或输出的若干变量。
注意如果要使用C语言的读入输出函数,需要#include <cstdio>

scanf函数

scanf函数中的格式字符串用来指定依次读入的类型,例如下面的例子中%d表示以十进制方式读入一个int类型,%lf表示读入一个double类型。后面给的变量需要是指针类型,因此要在前面加&

    int a;double b;scanf("%d%lf", &a, &b);

(C++中的字符串是用双引号包围的)

格式字符
  • %d – int
  • %ld – long
  • %lld – long long (Linux)
  • %I64d – long long (Windows)
  • %u – unsigned
  • %lu – unsigned long
  • %llu – unsigned long long (Linux)
  • %I64u – unsigned long long (Windows)
  • %c – char
  • %f – float
  • %lf – double

printf函数

和scanf类似,需要提供格式字符串,但是后面直接提供变量的值,不需要加&操作符。

    int a = 10;double b = 2.5;printf("%d %.5lf\n", a, b);

对于实数类型,用上面的方式可以四舍五入保5位小数输出。因此上面程序片段的输出结果是:
10 2.50000
(因为格式字符串中间有个空格,输出时中间也就有空格,并且最后会换行(\n)
printf函数中的格式字符串其实就是要打印的内容,只不过它把%d%c之类的格式字符替换成后面提供的参数。所以你可以用printf函数直接输出字符串:
printf("Hello World\n");

scanf函数和printf函数的返回值

scanf函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。这里的EOF是在cstdio头文件中被定义的
printf函数返回实际输出的字符数。
下面的程序可以不停地读入n后输出直到文件结束。

    int n;while (scanf("%d", &n) != EOF)printf("%d\n", n);

C++语言的读入输出字符

  • char c=getchar();
  • putchar(c);

C++语言的读入输出流

cin/cout

由于C++是面向对象的编程语言,对于读入输出的处理也更加对象化。由于OI竞赛中并不需要对面向对象的编程思想有太多了解,这里也不展开细说,看看下面的代码应该就很容易理解C++如何从屏幕读入输出。

    int x;double y;cin >> x >> y;cout << x << ' ' << y << endl;

cincoutiostream头文件中定义好的类,因此要#include <iostream>后才能使用。读入数据时可以想象是从cin中拿出来,所以用>>运算符,输出时正好相反,因此使用<<运算符。最后的endl表示换行,也可以用’\n’代替。

输出流控制

  • dec : 十进制输入输出
  • hex : 十六进制输入输出
  • oct : 八进制输入输出
  • setw(int width) : 设置场宽
    • 可以写为cout.width
  • ws : 提取空白符,即去掉
  • setprecision(int num) : 设置输出位数(包括整数、小数)
    • 使用fixed后,设置小数位数
    • 一直作用,直到再次设置
    • 可以写为cout.precision
  • endl : 换行,并刷新流
  • ends : 终止符
  • setfill(int ch) : 填充字符
    • 可以写为cout.fill()
  • put : 输出一个字符
    • 可以级联cout.put().put()…
  • left/right : 左/右对齐

cin.get()/cin.getline()

  • cin.get
    • 读入一个字符作为返回值
    • char c=cin.get;
  • cin.getline
    • 读入一个C-Style字符串
    • cin.getline(数组起始值,最大长度)
    • char c[80];<br>cin.getline(c,80); // cin.getline(c+1,79);从c[1]开始读
    • 相当于gets(数组起始值)

如何选择读入输出方式

C语言的scanf函数和printf函数需要提供格式字符串,而C++语言的cincout只需要提供变量,这样看起来cin和cout显得更方便。不过在实际情况中,cin和cout的效率非常低下,读入或输出2MB的文件就有可能会超时(时限1s的情况),并且cout对于实数是选择一个合适的精度,要手动控制比较麻烦。因此大部分C++选手在OI竞赛中使用scanf和printf进行读入输出操作。使用scanf和printf读入输出long long类型时需要特别注意使用的系统平台,用错格式符的话会产生无法正确读入输出的后果。
还有要说明的是,scanf、printf和cin、cout默认情况下是同步的,也就是说你可以混用两种读入输出方式。例如对用long long类型使用cin、cout读入输出,就不需要特别注意系统平台的差异。

特别注意:有时不得不大量读入long long,需要使用cin/cout时,为了加快读入速度,可以使用下边的方式:

    std::ios::sync_with_stdio(false);std::cin.tie(0);//此时不要用scanf/printf了

练习题

    printf("%d\n", 10.0);// 格式字符错误,应该用%lfprintf("%.5lf\n", 5);// 格式字符错误,应该用%dint a, b;scanf("%d%d", a, b);// a和b前面缺少&

数据结构、常用函数

数组

数组有个很文艺的名称:随机存取线性表。其实数组就是多个相同类型的变量依次排在一段连续的内存中。C++语言中的数组长度不可变。下面的程序片段中定义了一个长度为10的int数组a,可用的下标是0..9(你只能指定数组的长度,不能像Pascal中那样指定下标的上下界)。

    int a[10];a[0] = a[9] = 1;a[10] = 1;// 数组下标越界,但运行时未必会给出异常int n;int b[n]; // 数组长度必须是常量
数组的长度

C++中数组的长度可以是变量,但是定义之后便不可改变。如果说用变量作为数组的长度,那么数组的长度为执行定义的语句时那个变量的值。一般来说,我们都将数组定义成全局变量,由于全局变量在主函数之前,就没法用读入的数作为数组长度定义数组,因此一般情况下还是将数组长度指定为常数,并且要看清题目数据范围,不要把数组开小

一维数组和指针的关系

由于数组相当于内存中一段连续的空间,因此将刚才定义的数组a画成下面的形式:
下面的箭头表示指向相应位置的指针。例如指向a[0]的指针就是a(或看成a+0),也就是说&a[0]==a。然后&a[1]==a+1,以此类推直到&a[9]==a+9。这也就是说,如果a是某种类型的数组,那么它可以看成这种类型的指针。

指针的加减法

前面解释一维数组和指针的关系时,已经用到了将一个指针和整数相加的运算,除此之外,两个指针还可以相减。例如下面的程序片段:

    int a[10];int *p = &a[2], *q = &a[5];int t = q - p;  // q - p的值为3

注意到p实际上就是a+2,q实际上就是a+5,因此很自然的能得出q-p=(a+5)-(a+2)=3。
除了将指针加上或减去一个整数以外,也能够对指针进行++和–。
总结一下指针加减法:一个指针可以加上或减去一个整数,两个指针可以相减得到一个整数。

再谈new和delete

new操作符其实可以申请多于一个指定类型的空间,例如下面的程序片段:
int *a = new int[10];
new int[10]申请了连续10个int类型,并返回了指向第一个int的指针,这其实和数组是一样的。将这个指针赋值给int指针a后,a就可以当做数组使用,也就是说a[5]=1这类的赋值都是合法的。你可以这样理解,编译器对于[]运算符,实际上是进行了指针的加法,也就是说a[5]被理解为*(a+5),所以只要a是指针类型,就能使用[]运算符,但是你要保证你给的下标是有意义的。
清理空间时,要使用这样的语句:delete[] a;
使用new申请空间时的长度可以是变量。也就是你也可以这样写:int *a = new int[n];
出于效率的考虑,多数情况下我们不用这样的方法代替数组。

高维数组

除了一位数组之外,C++也支持高维数组,直接看下面的程序片段:

    int a[10][10], b[10][10][10];a[1][1] = 1;b[1][1][1] = 1;

上面的程序片段中定义了一个二维数组a和一个三维数组b,所有下标的范围都是0..9
C++中的高维数组访问和Pascal不一样,不是用逗号分隔,而是用多对方括号。(其实Pascal中也支持这样的访问方式)

C风格字符串

C语言里用字符数组来存储字符串,后面讲到STL时会再谈到C++中的string类。
C风格的字符串可以表示为指向char的指针,也就是char*。这个指针指向字符串第一个字符的位置,后面的字符就是依次往后加,如果遇到了字符’\0’(ASCII码为0的字符),就表示字符串结束了,其中’\0’不是字符串的一部分。
char *str = "abcd";
观察上面这条赋值语句。其中”abcd”是常量字符串,编译器在编译时,会在内存某块区域申请连续5个char,依次赋值为’a’、’b’、’c’、’d’、’\0’,然后将指向’a’的指针赋值给str。
如果我们想要创建字符串,可以定义一个char数组,然后依次赋值。例如下面的程序片段,虽然str是长度为10的数组,但是str也可以看成char*类型,它的前五个字符正好能看成一个完整的字符串。

    char str[10];str[0] = 'a'; str[1] = 'b';str[2] = 'c'; str[3] = 'd';str[4] = '\0';

读入、输出C风格字符串

scanf函数和printf函数可以读入输出C风格的字符串,使用的格式字符是%s:

    char str[10];scanf("%s", str);printf("%s\n", str);

由于str等价于指向char的指针,因此scanf中传递的参数是str,而不是&str。
还有scanf函数读入时,空白字符(空格、制表符、换行等)都会作为分隔符,并且它会在字符串最后一个字符后面加上'\0',也就是说长度为10的字符数组最多只能存储长度为9的字符串,所以开数组的时候要注意多开1.

其他读入输出函数

用scanf函数读入字符串时,遇到空白字符就会停下,有时候题目要求读入一行字符串,这时候我们就可以使用gets函数。

    char str[1000];gets(str);

gets(str)会将当前行剩下的字符依次存入str中,并在最后加上’\0’,因此你需要确保str数组的长度是足够的。上面的程序片段中,str数组只能存储长度为999的字符串。
类似的,使用puts函数可以输出一个字符串(输出字符串后不会自动输出一个换行)。
还有getcharputchar可以读入输出单个字符。需要注意换行字符、空白字符都会被getchar读到。

    char str[1000];gets(str);puts(str);char ch;ch = getchar();putchar(ch);

cstring头文件

cstring头文件中包含一些处理C风格字符串的函数,主要介绍下面两个函数的用法:

  • unsigned strlen(char *str);
  • int strcmp(char *str1, char *str2);
strlen函数

strlen函数可以计算字符串的长度,它的原理其实就是从给定的指针开始往后,遇到’\0’时停止。

    int a = strlen("abcd");  // a = 4char b[10];b[0] = 'a';b[1] = 'b';b[2] = 'c';b[3] = '\0';int c = strlen(b); // c = 3
strcmp函数

strcmp(str1, str2)用来比较字符串str1和str2,返回值类型为int,返回值为-1说明str1字典序比str2小,返回值为0说明相等,返回值为1说明str1字典序比str2大。

    char a[10], b[10];scanf("%s%s", a, b);int c = strcmp(a, b);
strcat函数

strcat(str1,str2)用来连接字符串str1,str2结果保存在str1中,所以记得要把数组开的足够大

    char a[]="12345",b[]="67890";strcat(a,b);  //TIPs:不可以写成 a=b;cout<<a;  //输出1234567890
strcpy函数

strcpy(str1,str2)用来将str2拷贝至str1中,注意数组大小

    char a[]="12345",b[]="67890";strcpy(a,b);cout<<a;  //输出67890

什么时候使用C风格字符串?

特别需要说明的是,你没法用运算符来进行C风格字符串的相关操作,包括赋值、比较、连接等。后面会讲到C++的string类,使得你可以用运算符来完成字符串的很多操作。
由于不能使用运算符对C风格字符串进行操作,因此对于字符串操作题,一般不使用C风格字符串,而会使用STL中的string类。
但是有些题目只是读入字符串做一些简单判断,或只需要读取字符串的字符,这种时候用C风格字符串可以获得最好的效率。

memset函数

memset函数常用来给一个数组清0。一般写法是如下形式:

    int a[100];memset(a, 0, sizeof(a));

memset的工作方式是每个字节赋值成第二个参数的值,第一个参数表示开始赋值的位置,第三个参数表示赋值的字节数。sizeof(a)可以算出a数组占用的字节数。
除了清零之外,也可以用memset函数对数组整体赋值其他的值。

    bool a[100];memset(a, true, sizeof(a));int b[100];memset(b, 255, sizeof(b));char c[100];memset(c, 'a', sizeof(c));

其中bool数组a被清成了true,字符数组c被清成了字符’a’。int数组b被清成了-1,因为每个int四个字节的每个字节都是全1,所以最终的值是-1。

memcpy函数

memcpy函数可以用来复制数组:

    int a[100], b[100];memcpy(a, b, sizeof(b));

第一个参数表示目标数组,第二个参数被复制的数组,第三个参数表示复制的字节数。上面的用法就相当于把b数组的内容复制到a数组。假如a数组长度小于b数组,就会出现问题。假如a数组长度大于b数组,只有a数组的前100个int会被复制成b数组的内容,后面的保持不变。一般只会对长度相同、类型相同的数组使用memcpy。

memset和memcpy的注意点

这两个函数都在头文件cstring中,因此使用时需要#include <cstring>
memset和memcpy中都用到了sizeof运算符(没错,它其实是运算符,sizeof(a)可以写成sizeof a),sizeof运算符会计算给定变量或常量占用的字节数。对于数组类型,它会计算出整个数组占用的字节数。需要注意的是,如果你是用new申请了一段空间后赋值给一个指针,sizeof这个指针会得到这个指针类型占用的字节数(32位系统下是4字节),而不会得到new申请的字节数。
如果不太明白可以看下面的例子:

    int *a = new int[10];int x = (int)sizeof(a); // x = 4int b[10];int y = (int)sizeof(b); // y = 4 * 10

同样的情况还发生在函数的参数中,后面还会再提到。

分清指针和数组名

数组名可以看成常量指针(不可修改),但和指针是有本质区别的。
sizeof一个数组名得到的是整个数组占用的字节数,而sizeof一个指针得到的是4(32位系统下指针类型占用4字节)。

    int a[10]; // 数组名int *b; // 指针int *c = new int[10]; // 指针!b = c; // 合法赋值a = c; // 非法赋值!!

初始化数组

定义数组时,通常不能确保数组元素的初始值是0这样的值,比较保险的方法是在使用数组前对数组元素的值进行正确的初始化。
前面已经说过了用memset对数组整体赋值,除此之外,对于一维数组也可以在定义时赋初始值。

    int a[5] = {0, 1, 2, 3, 4};int b[5] = {0, 1, 2};

数组a的元素依次被初始化为0、1、2、3、4。数组b的话,前三个元素被初始化为0、1、2,最后两个元素使用默认值0。也就是说如果提供的数字个数不够了,剩下的元素就会用默认值0。
初始化字符数组时,我们还可以直接用下面的形式:
char a[10] = "abc";
数组a的前三个元素会依次被赋值为’a’、’b’、’c’,后面的元素都是’\0’。
需要注意的是数组的长度必须够存储初始化的字符串,也就是数组长度至少要是字符串长度加一

常量数组

有时候为了方便编程,我们会定义常量数组。例如迷宫里只能向四个方向走时,我们可以定义一个二维的位移量数组:
const int u[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
定义一维常量数组时可以不指定数组的大小,编译器会根据你提供的内容算出数组的大小:
const int t[] = {1, 2, 3, 4, 5};

结构体

结构体和Pascal中的record类似,可以将一些不同的类型放在一起:

    struct person {char name[100];int age;bool sex;};                         //要有分号!!person Jack;               //定义方式1Jack.age = 30;             //访问方式2Jack.sex = true;person *Bob = new person;  //定义方式2Bob->age = 18;             //访问方式2Bob->sex = true;

从前面的程序片段中可以看出,struct相当于是用户创建了一种新类型,这里创建的struct类型名为person,有三个域name、age和sex。后面访问时用’.’来访问域。如果是指针的话,可以直接用->访问域,而不用先用’*’再用’.’。
需要注意结构体定义右花括号后要有分号,不过其实可以在这个分号之前定义这个结构体的变量。例如:

    struct person {// 这里和前面一样,为了节约篇幅省略} Jack, *Bob;    //定义方式3

枚举类型

C++中的枚举类型和Pascal中的类似。

    enum color {red, green, blue} x;color y;x = red;y = blue;

上面的程序片段中定义了枚举类型color,然后还定义了color类型的变量x和y。
枚举类型和int类型是可以相互转化的。实际上枚举类型中的每种取值对应了一个数字,默认情况按照定义时候的顺序从0开始,当然也是可以人为地指定每种取值对应的数值。
前面的例子中,red对应0,green对应1,blue对应2。
通过隐式或显式类型转换,可以把枚举类型转换为int,也可以把int转换为枚举类型。

练习题1

    int t[10]; // 正确t[10] = 1; // 错误,下标越界char a[10] = "abcd"; // 正确,初始化字符数组a = "abc";// 错误,数组名虽然是指针,但不可改变取值int *b = new int[10]; // 正确memset(b, -1, sizeof(b)); // 错误,sizeof(b)为4int c[100]; // 正确memset(c, -1, sizeof(c));// 正确,c中的元素都被初始化为-1char d[4] = "abcd"; // 错误,数组长度至少要为5

练习题2

    int a[5] = {5, 4, 3, 2, 1};printf("%d\n", *a); // 输出a[0],即5printf("%d\n", *(a + 3)); // 输出a[3],即2printf("%d\n", (int)sizeof(a)); // 输出20int *b = new int[5];printf("%d\n", (int)sizeof(b)); // 输出4char a[10] = "abcde";printf("%d\n", (int)strlen(a)); // 输出5printf("%d\n", (int)sizeof(a)); // 输出10
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. SQL Server 2005 集成服务简介

    Kamal Hathi简介要在当今的商务世界中获得竞争优势,将公司的数据转换为有意义且可操作的信息是唯一最为重要的竞争优势源。充分利用数据爆炸,以更好地了解过去业务状况,洞悉未来的发展方向,这已经成为全球组织中的企业 IT 部门所面临的最有挑战性的任务之一。与数据集成相关…...

    2024/3/14 16:45:34
  2. Html.DropDownListFor的选项值为字符型问题

    我快要疯了。asp.net mvc的这个DropDownListFor,无论在服务器端如何设置,设置哪个值被选中,结果到了页面输出,选中值根本没有被选中,没有任何一个值被选中,下拉框只冷冰冰地显示一个“–请选择–”。强调一下,如果对于 value 是数值型,而text是字符型来说,不存在以上问…...

    2024/3/14 16:45:32
  3. Orcale与SQL Server

    一.Oracle简介美国Orcale公司研制的一种关系型数据库管理系统,是一个协调服务器和用于支持任务决定型应用程序的开放 型RDBMS。它可以支持多种不同的硬件和操作系统平台,从台式机到大型和超级计算机,为各种硬件结构提供高 度的可伸缩性,支持对称多处理器、群集多处理器、大…...

    2024/3/14 10:41:35
  4. 关于static关键字及其初始化

    什么是static 通常来说,创建类之后,只有执行new来创建对象时,数据存储空间才被分配,这个类的方法才能被外界调用。但是有两种特殊情况用这个方法不能解决:只想为某特定域分配单一存储空间,而不去考虑是否创建对象或创建多少对象。 希望方法不于包含它的类的任何对象关联。…...

    2024/3/14 16:45:31
  5. Pascal竞赛读文件方法

    Pascal程序读文件要求例如:输入文件名 1.in输出文件名 1.outvar... beginassign(input,1.in); reset(input); assign(output,1.out); rewrite(output); 程序...close(input); close(output); end....

    2024/3/14 16:45:33
  6. 基于GMap.Net的地图瓦片下载工具

    关键字:GMap.Net、地图瓦片下载、高德瓦片该地图瓦片下载器是根据GMap.Net源码改编,主要以高德地图源作以演示,提供了矩形、圆形、多边形、图标、报警图标、图表、测距等元素的使用与编辑;提供了地图瓦片下载功能,提供了多类型地图源的配置(普通地图、卫星地图、路网地图…...

    2024/3/14 16:45:30
  7. VS2008个人博客系统

    VS2008个人博客系统 学校期间,有课程涉及过.NET这门语言,所以利用课余时间写了一个个人博客系统。由于当时还不会什么框架,所以差不多所有代码都是手敲的。在此写一下我的感受和体会。工具:VS2008 加其自带的sql2005因为上课是安装的这个老版本,就没换。 个人博客系统步骤…...

    2024/3/14 16:45:28
  8. SQL Server、Oracle纵横谈

    作为现今主流商业数据库产品,SQL Server、Oracle孰优孰劣的争论历来就没有休止过,从企业级应用的门槛、运行效率、扩展性、高可靠性、运行安全性到总体成本、易用性等等,两个产品间的每一个特性几乎无一不是讨论的话题和争论的焦点。数据库作为运行环境的中心,在解决方案中…...

    2024/3/14 16:45:27
  9. Asp.Net MVC中DropDownListFor如何传入数据

    查看对应的函数方法,我们可以知道,DropDownListFor所需的参数为IEnumerable<SelectListItem>,所以我们在后台传入即可情况一、数据是固定的 如果列表数据是固定的,建议使用ViewData[""]传递数据 下面是控制器的代码 public ActionResult UploadItem() {#re…...

    2024/3/14 16:45:26
  10. 骄知乐——如何安装Pascal(win10安装闪退或显示版本不同的问题)

    安装Pascal(分虚拟机和vscode) 1.虚拟机安装 VM介绍: VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,它能在Windows系统上虚拟出多个计算机,每个虚拟计算机可以独立运行,可安装各种软件与应用等。 前提(要看):…...

    2024/3/14 16:45:25
  11. 打造最完美的BLOG系统

    打造心中最完美理想的BLOG系统,特列举以下特征和功能,希望给所有BLOG程序编制者参考。如果有根据以下项目编制成功BLOG PROGRAM,别忘了通知我哦。如果还有需要补充的请多指教。BLOG的基本特征和功能要素:1、RSS-简称“聚合”RSS 是一种技术规范的简称,不同的技术团体将其…...

    2024/3/14 16:45:24
  12. C语言关键字static的绝妙用途

    为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是变量还是关键字,在局部变量中,变量仅限于局部可见,在全局区中,static变量或函数仅限于本文件可…...

    2024/3/14 16:45:26
  13. 【python 下载器】python下载电影&视频&电视剧

    输入视频链接,python后台下载视频# encoding: utf-8 import sys reload(sys) sys.setdefaultencoding(utf-8) import requests import re import time time1=time.time()link=http://v3.365yg.com/a0ee2d891f16098d3098f8f14361493b/593e7f87/video/m/114263c000029b7a100c837…...

    2024/3/27 18:44:30
  14. 理解java static 的作用

    在java如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。 有时你希望定义一个类成员,使…...

    2024/3/14 16:45:21
  15. 非常烂的Blog系统!!!

    设置css就花了几个小时虽然CSDN和MSDN有良好的声誉稳定+永恒(或许)但是blog是给人看的空洞的东西怎么拿得出去...

    2024/3/14 16:45:20
  16. 项目经理之项目经理需要用哪些工具?

    随着IT行业的发展,IT行业内的项目拓展和投资比比皆是。为了提高项目管理水平,赢得市场竞争,特别是在加入WTO后在国内、国际市场上拥有与国际接轨的项目管理人才, --> 越来越多的业界人士正通过不同的方式参加项目管理培训并力争获得世界上最权威的职业项目经理(PMP)资…...

    2024/3/13 22:23:24
  17. Pascal 转 C++ 教程2

    Pascal 转 C++ 教程2转自 https://blog.wind-flower.cn/2018/08/07/%E6%95%99%E7%A8%8B2/C++ 分支、循环、函数C++ 中可以使用万能头文件 #include <\bits/stdc++.h> 分支if语句C++中if语句的用法和Pascal基本类似,但主要有三个不同点:进行判断的条件表达式一定要用圆…...

    2024/3/13 22:23:26
  18. 前台页面展示时,Html.DropDownListFor无法选中已有值问题

    1、后台为下拉框取值,设置值如下: ViewBag.IAccessStyle = DropDownList_DictValue("接入方案", model.IAccessStyle); 2、前台使用@Html.DropDownListFor展示“接入方案”下拉框,代码如下@Html.DropDownListFor(m => m.IAccessStyle, ViewBag.IAccessStyle as…...

    2024/3/13 22:23:22
  19. 万能地图下载器中怎么把DWG导入谷歌地图,再导出KML文件

    由于DWG属于Autodesk公司的专有格式,只有部分的软件支持,在于地图影像结合使用的时候不是很方便,我们可以通过万能地图下载器将其转换成更通用一点的kml格式,便于和在线地图的叠加使用。工具/原料水经注万能地图下载器 AutoCAD 2010方法/步骤1.首先使用CAD打开dwg文件,点…...

    2024/3/29 3:38:21
  20. 如何录制gif动态图片并在CSDN中插入动态图片

    我们在网上浏览别人的博客时,经常可以看到以gif动态图显示的程序效果演示和代码段,那么如何录制gif动态图片并在CSDN中插入动态图片呢? 下面介绍一种简单的方法,了解之后,你也可以将其应用在自己的博客中,以动态图的方式展示程序运行结果,当我们想要在程序中更加清晰的演…...

    2024/3/14 16:45:19

最新文章

  1. 《QT实用小工具·一》电池电量组件

    1、概述 项目源码放在文章末尾 本项目实现了一个电池电量控件&#xff0c;包含如下功能&#xff1a; 可设置电池电量&#xff0c;动态切换电池电量变化。可设置电池电量警戒值。可设置电池电量正常颜色和报警颜色。可设置边框渐变颜色。可设置电量变化时每次移动的步长。可设置…...

    2024/3/29 14:37:56
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【全栈小5】我的创作纪念日

    目录 前言机缘收获粉丝和原创个人成就六边形战士 回顾文章原代码代码优化 憧憬 前言 全栈小5 &#xff0c;有幸再次遇见你&#xff1a; 还记得 2019 年 03 月 29 日吗&#xff1f; 你撰写了第 1 篇技术博客&#xff1a; 《前端 - 仿动态效果 - 展开信息图标》 在这平凡的一天&…...

    2024/3/29 12:30:36
  4. 【机器学习300问】55、介绍推荐系统中的矩阵分解算法是什么、有什么用、怎么用?

    本来这篇文章我想先讲矩阵分解算法是什么东西的&#xff0c;但这样会陷入枯燥的定义中去&#xff0c;让原本非常有趣技术在业务场景中直观的使用路径被切断。所以我觉得先通过一个具体的推荐算法的例子&#xff0c;来为大家感性的介绍矩阵分解有什么用会更加合理。 如果你还不知…...

    2024/3/29 10:00:40
  5. 基于SSM非遗视域下喀什旅游网站

    ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高&#xff0c;然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式&#xff0c;各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…...

    2024/3/28 21:51:49
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/3/27 10:21:24
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/3/24 20:11:25
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/3/29 2:45:46
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/3/24 20:11:23
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/3/29 5:19:52
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/3/28 17:01:12
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/3/29 11:11:56
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/3/29 1:13:26
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/3/29 8:28:16
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/3/29 7:41:19
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/3/24 20:11:18
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/3/29 9:57:23
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/3/29 0:49:46
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/3/24 20:11:15
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/3/27 7:12:50
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/3/24 20:11:13
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/3/26 11:21:23
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/3/28 18:26:34
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/3/28 12:42:28
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/3/28 20:09:10
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57