zoukankan      html  css  js  c++  java
  • 实现自己的vector(简单模版)

      1 #pragma once
      2 template<class T>
      3 class CMyVector{
      4 private:
      5     int m_nLenth;//长度
      6     int m_nCount;//元素个数
      7     T*  m_pVec;//指针
      8 public:
      9     CMyVector(int nCount = 0, T tValue = 0){
     10         m_nCount = nCount;
     11         m_nLenth = nCount;
     12         if (nCount){
     13             m_pVec = new T[nCount];
     14             if (!m_pVec)
     15                 return;
     16             for (UINT i = 0; i < nCount; i++){
     17                 m_pVec[i] = tValue;
     18             }
     19         }
     20     }
     21     ~CMyVector();
     22     bool IsEmpty(){
     23         return !m_nCount;
     24     }
     25     bool IsFull(int nInsertCount = 1){
     26         return m_nCount + nInsertCount > m_nLenth;
     27     }
     28     bool Push_back(T tValue){
     29         if (IsFull()){
     30             Resize();
     31         }
     32         m_pVec[m_nCount++] = tValue;
     33     }
     34     bool Resize(int nNum = 0){
     35         m_nLenth += nNum;
     36         if (nNum){
     37             m_nLenth += nNum;
     38         }
     39         else{
     40             m_nLenth = m_nLenth * 2 + 1;
     41         }
     42         T* p = new T[m_nLenth];
     43         if (!p){
     44             //失败
     45         }
     46 
     47         ZeroMemory(p, sizeof(T)*m_nLenth);
     48         memcpy_s(p, sizeof(T)*m_nCount, m_pVec, 
     49             sizeof(T)*m_nCount);
     50         delete[] m_pVec;
     51         m_pVec = p;
     52     }
     53     bool Pop_back(T &tValue){
     54         if (IsEmpty()){
     55             return false;
     56         }
     57         m_nCount--;
     58         tValue = m_pVec[m_nCount];//可修改返回值
     59         return true;
     60     }
     61     T operator[](int nIndex){
     62         if (nIndex > m_nCount - 1){
     63             //error
     64             return 0;
     65         }
     66         return m_pVec[nIndex];
     67     }
     68     bool Insert(int nPos, int nCount, T elem){
     69         if (nPos > m_nCount){
     70         
     71         }
     72         if(IsFull(nCount)){
     73             Resize();
     74         }
     75         for (UINT i = 0; i < m_nCount - nPos + 1; i++){
     76             m_pVec[nCount + m_nCount - 1 - i] = m_pVec[m_nCount - 1 - i];
     77         }
     78         for (UINT i = 0; i < nCount; i++){
     79             m_pVec[nPos + i] = elem;
     80         }
     81     }
     82     bool Insert(int nPos, T* begin, T* end){
     83         int nCount = (end - begin) / sizeof(T)+1;
     84         if (nPos > m_nCount){
     85 
     86         }
     87         if (IsFull(nCount)){
     88             Resize();
     89         }
     90         for (UINT i = 0; i < m_nCount - nPos + 1; i++){
     91             m_pVec[m_nCount + nPos - 1 - i] = m_pVec[m_nCount - 1 - i];
     92         }
     93         for (UINT i = 0; i < nCount; i++){
     94             m_pVec[nPos + i] = *begin;
     95             begin++;
     96         }
     97     }
     98     T& At(int nIndex){
     99         if (nIndex > m_nCount - 1){
    100             //error
    101         }
    102         return m_pVec[nIndex];//可修改值
    103     }
    104 };
    让数据变得更安全!
  • 相关阅读:
    学习:恢复被孤立的数据库dbo (转)
    学习:SharePoint编程提升权限的方法(转)
    SQL行列互换
    前台用js、jquery出现错误很多是由于IE缓存
    关于dialog首次加载的时候隐藏的一个问题
    要取某个对象的值,先要判断对象是否为空的简便写法(记)
    写js或者jquery的时候最重要的调试,再也不用alert弹出对象
    嵌入式软件测试的十大秘诀
    SIMULINK sfunction的设计
    关于java解压zip与rar的问题
  • 原文地址:https://www.cnblogs.com/Alyoyojie/p/5147687.html
Copyright © 2011-2022 走看看