C++基础语法学习(三):循环

笔者需要参与一项slam项目的开发,经年不用C++知识已经统统上交给了国家,尤其是现在用python炼丹调参不亦乐乎,怕是一时都改不过来习惯。
故决定速刷C++primer(六)一书,把忘掉的东西捡起来,希望不要和python搞混。
(只是熟悉语法的话看菜鸟教程查表更快,但是为了摸鱼汇报进度还是过一下书吧)

循环

一看到循环就想到迭代,就想到时间复杂度,就想到数据结构。。。。。。。。


前缀与后缀

以递增运算符(++)为例:

int x = 5;
y = x++;//y=5,x=6
z = ++x;//z=6,x=6

前缀格式++x首先对x进行递增操作,然后将它赋值给其他变量;而后缀格式x++则是先把x赋值给其他变量,然后再进行递增操作。显然,当它不是表达式(即不赋值给其他变量)时,前缀与后缀在运算结果上没有差别(比如for循环里)。

  • 对于用户自定义类,前缀效率更高
  • 前/后缀与指针解除优先级相同,从右至左运算;后缀比前缀优先级高。

举个例子:

double x[5]{1.2,2.3,3.4,4.5,5.6};
double* pointer = x;
double y1 = *++pointer;
double y2 = ++*pointer;
double y3 = *pointer++;
double y4 = (*pointer)++; 
  1. 这里pointer指向数组x第一个元素的内存地址,*++pointer表示先对指针进行递增加一,指向第二个元素地址,然后指针解除取数,所以y1 = 2.3
  2. ++*pointer表示先取指针指向的数(第二个元素)(第一步已经改变了指针指向的地址),再对数进行递增,所以y2 = 3.3
  3. *pointer++表示先对指针进行递增再解除指针,但是后缀会先给表达式赋值然后才执行递增操作,所以这里解除的指针还没有递增,y3 = 3.3
  4. (*pointer)++表示对解除指针后的值进行递增操作,由于上一步指针进行了递增,所以此时指针指向了第三个元素,赋值给y4后才进行递增,所以y4 = 3.4

关系表达式

操作符 含义
< 小于
<= 小于等于
== 等于
!= 不等于
> 大于

注意赋值与关系判断里等于的区别

String比较

对于C风格字符串,使用strcmp函数,但是用string类会更简单,可以直接string xxxxxx != "sdksl"操作。

For循环

一个典型结构即:

for (初始值;测试表达式;更新循环测试的值)
{
	do something...
}
for (int i=0;i<5;i++){
	cout<< "hello world";
}
  • 设定初始值–>>判断是否应该循环–>>执行循环体内操作–>>更新循环值–>>…–>>…
  • 测试表达式最终会转换为bool类型,所以可以设定判断为0终止循环亦可。
  • 可以在括号里声明初始值,但是只在for循环里有效哦。
  • 循环变量更新可用逗号运算符,使得变量更新支持两组运算操作。

While循环

string name = "Angelbaby";
int i = 0;
while (name[i] != '\0')     // process to end of string
{
   cout << name[i] << ": " << int(name[i]) << endl;
   i++;
}

while循环和for循环几乎等效,一般使用for循环。

do while 循环

do
	body
while(test-expression);

出口条件的循环适用范围比较小,作为了解。

文本输入

char ch;
int count = 0;
cin.get(ch);        // attempt to read a char
while (cin.fail() == false)  // test for EOF
{
    cout << ch;     // echo character
    ++count;
    cin.get(ch);    // attempt to read another char
}
cout << endl << count << " characters read\n";

cin.fail()检测是否输入到句尾,cin.get(ch)获取输入字符,可输入空格等特殊符号。

tips

需要循环输入数字时,循环条件可以while (cin>>val1>>val2)类型转换判断bool嘛。

二维数组

初始化

实例:大括号

int array1[2][4] = {
{2,4,7,1},{3,2,6,4}
};

使用

通过array1[i][j]索引即可使用。


相关练习均已上传github。

你可能感兴趣的:(C++)