2021-04-09学习笔记

左移(<<)和右移(>>)

左移: 相当于乘法,左移几位就相当于原来的数成2的几次方。
二进制形式左移一位,多出来的一位补0。
eg. 1 << 5 = 1 * 25 = 32
右移: 相当于除法,右移几位就相当于除以2的几次方。
二进制形式右移一位,就相当于把最右边的一位数顶掉。
1)逻辑右移
不管是什么类型,空缺自动补0;
2)算数右移
若是无符号数,则空缺补0,若是负数,空缺补1;
eg. 16 >> 3 = 16 / 23 = 2

该部分参考文章为:
https://blog.csdn.net/weixin_42837024/article/details/98734787
https://editor.csdn.net/md?not_checkout=1&articleId=115558413

auto用法

1.用于赋予变量类型

auto的原理就是根据后面的值,来自己推测前面的类型是什么。

2.简化变量的初始化

如果这个变量有一个很长很长的初始化类型,就可以用auto代替。

3.用于迭代
对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围

for(auto &a : b)

例如:

int arr[10];
for(int i=0;i<10;i++)
{
    
    
  arr[i]=i;
}
 
for(auto &a : arr)
{
    
    
  std::cout << a;
}

先将数组中的10格式赋值,然后通过auto式的for循环输出 0 ~ 9 这十个数。

注意点:
1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)

2.函数和模板参数不能被声明为auto(原因同上)

3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid

4.定义在一个auto序列的变量必须始终推导成同一类型

auto x1 = 5, x2 = 5.0, x3='r';  // This is too much....we cannot combine like this

示例:

std::vector<std::string> ve;
std::vector<std::string>::iterator it = ve.begin();

我们可以用atuo来代替那个初始化类型:

auto it = ve.begin();

此外,如果是可用迭代器的对象的话,还可以这样操作:

int main(){
    
    
    vector<int>v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    for(auto i : v){
    
    
        cout<<i<<" ";
    }
    cout<<endl;
    return 0;
}

该部分参考文章:
https://blog.csdn.net/lwgkzl/article/details/82110068?utm_medium=distribute.pc_relevant_t0.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.baidujs&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2defaultBlogCommendFromMachineLearnPai2default-1.baidujs
https://blog.csdn.net/qq_37264323/article/details/102891185

猜你喜欢

转载自blog.csdn.net/LXC_007/article/details/115558413