c++11带来了哪些新变化

&*vec.begin()与vec.data()

智能指针初探

std::inner_product与std::accumulate初始值设置踩坑

std::forward使用

std::forward_list与std::advance

std::variant使用

std::string_view的使用

使用std::bind 将类成员函数绑定到回调函数

如何使用std::function 和std::bind取代继承

std::move_iterator、make_move_iterator

结构化绑定

智能指针小技巧

weak_ptr是怎么探知对象生死的?

如果这几种智能指针是对象x的数据成员,而它的模板参数T是个incomplete类型,那么x的析构函数不能是默认的或内联的,必须在.cpp文件里边显式定义,否则会有编译错或运行错

shared_ptr自定义删除器

enable_shared_from_this

弱回调

std::dynamic_pointer_cast转换shared_ptr

  1. 二进制字面量:可以使用0b或0B前缀表示二进制数,例如0b1010表示十进制数10。
  2. 泛型lambda表达式:可以使用auto关键字作为lambda表达式的参数类型,使得lambda表达式更加通用和灵活。
  3. 返回类型推导:可以使用auto关键字作为函数返回类型,使得函数的返回类型可以根据返回值自动推导。
  4. 初始化列表的改进:可以使用{}初始化列表进行列表初始化,支持更多的初始化方式和类型推导。
  5. constexpr函数的改进:可以在constexpr函数中使用if语句和循环语句,使得constexpr函数更加灵活和通用。
  6. 变长模板参数:可以使用template<typename... Args>语法定义变长模板参数,使得模板更加通用和灵活。
  7. std::make_unique函数:可以使用std::make_unique函数创建unique_ptr智能指针,避免了手动管理内存的麻烦。
  8. std::quoted函数:可以使用std::quoted函数对字符串进行转义和引号处理,使得字符串更加安全和可靠。
#include <iostream>
#include <string>
#include <iomanip>
 
int main()
{
    std::string str =  "Hello World";
    std::cout<<str<<std::endl;
    std::cout<< std::quoted(str)<<std::endl;
}

constexpr使用

c++17

C++20新特性

    stl操作库

    vector的基本使用

    stack、priority_queue、vector、deque、list、map、set

    std::shrink_to_fit

    std::partition

    std::partition_copy

    lower_bound、upper_bound、equal_range、binary_search

    std::list的splice有什么作用

    std::swap_ranges

    元组的合并与遍历