摘要:
vector基础 动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间中,释放原空间。 vector前端是封闭的 vector赋值操作 vector的容量和大小 容量永远大于等于大小(只有使用for循环添加5个以上的元素,容量才大于大小VS2022) 1 vecto 阅读全文
摘要:
全局函数的友元声明的作用是影响访问权限,也就是该全局函数可以访问类内私有的成员属性,但是友元的声明起不到普通声明的作用,也就是定义出现在使用后面必须得另外声明,光靠友元声明是不行的。 1 class Person 2 { 3 friend void fun(); 4 public: 5 Person 阅读全文
摘要:
977. 有序数组的平方 - 力扣(LeetCode) 所用算法:双指针 观察题目的规律,平方之后该数组两边的数大,中间的数小,因此想到双指针,一个指针指向数组的开头,一个指针指向数组的结尾。 如果你觉得在原数组上操作会将未遍历的元素覆盖掉,那么一定要开辟一个新的数组,将原数组的值赋给新的数组。 ( 阅读全文
摘要:
27. 移除元素 - 力扣(LeetCode) 所用算法:双指针(用于改变数组中成员的操作)算法说明:一般对数组进行更新会使用双指针的算法,一个是快指针,一个是慢指针。一般快指针是用来在原数组中获取新数组中的元素,慢指针是用来获取新数组需要更新的位置(相当于另外一个数组)。 1 int remove 阅读全文
摘要:
1 //使用下标遍历数组中的元素 2 int a[4] = { 1,2,3,4 }; 3 for (size_t i=0;i<4;++i) 4 { 5 cout << a[i] << endl; 6 } 1 //使用下标任意访问数组中某个元素 2 int a[4] = { 1,2,3,4 }; 3 阅读全文
摘要:
模板分为函数模板和类模板 函数模板 模板的语法 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定 1 template<typename T> 2 void mySwap(T& a, T& b) { 3 T temp = a; 4 a = b; 5 b = temp; 6 } 7 int 阅读全文
摘要:
三类继承方式 子类会将父类的除构造函数析构函数赋值运算重载符外的成员继承过来,只不过编译器隐藏了父类的私有属性,子类不可以访问。 1 class Base { 2 public: 3 int a_; 4 protected: 5 int b_; 6 private: 7 int c_; 8 }; 9 阅读全文
摘要:
当自定义类型需要进行运算的时候必须讲运算符进行重载。运算符重载使得编译器给所有的类起了一个通用的运算符名称即operator和运算符组合的形式,这样不同类在重载运算符的时候就有一个通用的名字了。 加号运算符重载 类和基本内置类型相加的实现: 这种情况可以使用全局函数重载和成员函数重载 1 class 阅读全文
摘要:
定义一个指向对象的指针或则引用不会调用构造函数和析构函数。 首先,强调一点,和函数传参一样,函数返回时也会做一个拷贝。从某种角度上看,和传参一样,也分为三种: (1)返回值:返回任意类型的数据类型,会将返回数据做一个拷贝(副本)赋值给变量(return语句后边的变量会生成一个副本给一个临时量,这个临 阅读全文
摘要:
写在前面: 在拷贝初始化(也就是用等号初始化,注意使用拷贝构造函数创建一个新的对象不属于拷贝初始化)过程中,编译器可以(但不是必须)跳过拷贝构造函数或者移动构造函数,直接创建对象。 1 string null_book="999"; 2 //可以改写为 3 string null_book("999 阅读全文