网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
push\_back(\*it);
++it;
}
}
## 二、类型推导
### 2.1 auto
`auto`的作用就是**自动推导对象的类型**。从这个意义上讲,`auto`并非一种"类型"声明,而是一个类型声明时的"占位符",编译器在编译时期会将`auto`替换为变量实际的类型。
double foo()
{
return 1.1;
}
struct Test
{};
int main()
{
// 内置类型
int a = 1;
auto b = a;// int
auto c = foo();// double
// 自定义类型
Test test;
auto ret = test;// struct Test
return 0;
}
### 2.2 auto注意事项
**1️⃣ 首先定义变量的时候一定要初始化**
auto a;// error
a = 10;
**2️⃣ 不能作为函数的形参**
void func(auto a) {}// error
**3️⃣ 变量不能作为自定义类型的成员变量**
struct Test
{
auto a = 1;// error
};
**4️⃣ 不能是auto数组**
auto arr[] = { 1, 2, 3 };// error
**5️⃣ 模板实例化类型不能是auto类型**
std::vector v;// error
### 2.3 decltype
关键字decltype将变量的类型声明为表达式指定的类型。我前面用的`typeid(x).name()`可以拿到x类型的字符串,但是不能使用这个再去定义一个变量。
而decltype却可以拿到变量,后面还可以继续使用这个类型定义出变量。
int main()
{
int x = 0;
decltype(x) a = 10;// int
double y = 0.0;
decltype(x + y) b;// double
return 0;
}
## 三、新增与改进
### 3.1 nullptr
nullptr 是为了解决原来 C++中 NULL 的二义性问题而引进的一种新的类型,因为NULL既能表示整型也能表示指针。
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif /* NULL */
### 3.2 范围for
在 C++中 for 循环可以使用基于范围的 for 循环,示例代码如下:
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6 };
for (int& e : a)
{
std::cout << e << " ";
}
std::cout << ‘\n’;
return 0;
}
### 3.3 array
template < class T, size_t N > class array
array就是个数组,它跟vector的区别是array是**静态数组**,不能扩容。
那么它跟普通数组有什么区别呢?
>
> 普通的数组对越界的检查是随机的,如果越界可能不会报错,但是**array一定能检查出来**。
>
>
>
int main()
{
int a1[10];
a1[22];// 不报错
std::array<int, 10> a2;
a2[22];// 报错
return 0;
}
### 3.4 forward\_list
template < class T, class Alloc = allocator > class forward_list
forward\_list就是一个单链表,它只有头插和头删接口,并没有尾插和尾删接口。
int main()
{
std::vector a = { 1, 2, 3, 4, 5, 6 };
std::forward_list lt(a.begin(), a.end());
for (auto& e : lt)
{
std::cout << e << " ";
}
std::cout << ‘\n’;
return 0;
}
### 3.5 unordered系列
这个在之前的文章有详细介绍:
[【C++】哈希](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
>
> 跟map与set相比**效率得到了大提升**。
>
>
>
### 3.6 final与override
这里在多态里面有过详细介绍:
[【C++】多态](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)
>
> final关键字在**父类**修饰虚函数,表示该虚函数不能再被重写。
> override在子类修饰虚函数,检查子类是否重写,如果没有重写则编译报错。
>
>
>
---
---
![img](https://img-blog.csdnimg.cn/img_convert/0e39735c3f3caad633d02fea64ba7054.png)
![img](https://i-blog.csdnimg.cn/blog_migrate/bf773bbce40d108ef3064390ab067f3b.png)
![img](https://img-blog.csdnimg.cn/img_convert/d6684de8c3b4c632a4036d3b56b082e2.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
186)]
[外链图片转存中...(img-NPPQ3G7O-1715471601186)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**