C++基础语法(三)

 malloc和free new和delete的区别
 相同点:从堆上申请空间,需要手动释放
 不同点:malloc和free是函数,new和delete是操作符
 malloc申请空间不会初始化,new申请空间会初始化
  malloc要计算空间大小并传递,new只需要跟空间类型,若为多个对象在[]中指定对象个数
 malloc返回值为void*使用时必须强转,new不需要因为new后跟空间类型
 malloc申请空间失败时返回NULL需判定,new会抛异常要try catch 
 定位new表达式
 int main()
 {
 A* p=new A(1);
 A *p2=(A*)operator new(sizeof(A))
 new(p2)A(1)
 return 0;
 }
 模版初阶
 template <class T>//模版参数列表<classT1,class T2......>
 void Swap(T& a,T& b)
 {
 T tmp=a;
 a=b;
 b=tmp;
 }
 template <class T1, class T2>
 void fun(const T1& a, const T2& e)//传两个类型不同的参数
 {

 }
 template <class T>//模版参数列表<classT1,class T2......>
T Add(const T& left,const T& right)
 {
    return left + right;
 }
 int main()
 {
     int x = 2, y = 4;
     double c = 3.4, d = 5.1;
     Swap(x, y);
     fun(x, c);
     //推导实例化
     cout <<Add((double)x, c) << endl;
     //显示实例化
     cout << Add<double>(x, c) << endl;
     return 0;
 }
 类模板
 template <class T1,class T2,...class Tn>
  class
  {
  };
 template <class T>
 class Stack
 {
     T* arry;
     int _size;
     int _capacity;
 public:
     Stack(int n=4):arry(new T[n]),_size(0),_capacity(n){}
     ~Stack()
     {
         delete[] arry;
         arry = nullptr;
         _size = _capacity = 0;
     }
     void push(const T& a)
     {
         if (_size == _capacity)
         {
             T* tmp = new T[_capacity * 2];
             memcpy(tmp, arry, sizeof(T) * _size);
             delete[] arry;
             arry = tmp;
             _capacity *= 2;
         }
         _arry[size++] = x;
     }
 };
 int main()//类模板都是显示实例化
 {
     Stack<int> st1;
     st1.push(1);
     st1.push(2);
     st1.push(3);
     Stack<double> st2;
     st2.push(1.1);
     st2.push(3.3);
     st2.push(2.2);
     Stack<double>* pst = new Stack<double>;

 }
 STL
  string(管理字符串的类)
int main()
{
    string s1;//分别是无参,有参,拷贝构造
    string s2("hello world");
    string s3(s2);
    cout << s2 << s3 << endl;
    string s4(s2, 6, 15);//从第6个字符开始拷贝拷5个字符
    cout << s4 << endl;//若要考的多于source,则只考到结束
    string s4(s2, 6);//不传也考到结束
    string s5("hello world", 5);//用hello world的前5个字符初始化s5
    cout << s5 << endl;
    s2[2] = 'x';//operator[]重载使其可以像数组使用
 }

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值