【 코드 】 템 플 릿 동적 선형 표 & 유형 추출
#pragma once
#include<iostream>
#include<string>
struct __TrueType//
{
bool Get()
{
return true;
}
};
struct __FalseType
{
bool Get()
{
return false;
}
};
template <class _Tp>
struct TypeTraits
{
typedef __FalseType __IsPODType;
};
template <>
struct TypeTraits< bool>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< char>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< unsigned char >
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< short>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< unsigned short >
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< int>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< unsigned int >
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< long>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< unsigned long >
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< long long >
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< unsigned long long>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< float>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< double>
{
typedef __TrueType __IsPODType;
};
template <>
struct TypeTraits< long double >
{
typedef __TrueType __IsPODType;
};
template <class _Tp>
struct TypeTraits< _Tp*>
{
typedef __TrueType __IsPODType;
};
template <class T>//
class SeqList
{
public:
SeqList()
:_size(0),
_capacity(10),
_array(new T[_capacity])
{
memset(_array,0,sizeof(T)*_capacity);
}
SeqList(const T &x)
:_size(1),
_capacity(10),
_array(new T[_capacity])
{
_array[0] = x;
}
SeqList(const SeqList & x)
{
_array = new T[x._size];
my_memcpy(_array, x._array, sizeof(T)*x._size);//
_capacity = x._size;
_size = _capacity;
}
void PushBack(const T & x)
{
_CheckCapacity();
_array[_size++] = x;
}
SeqList & operator = (SeqList l)
{
swap(_array, l._array);
swap(_size, l._size);
swap(_capacity, l._capacity);
return *this;
}
~SeqList()
{
if (_array)
{
delete[] _array;
}
}
private:
void _CheckCapacity()
{
if (_size >= _capacity)
{
_capacity *= 3;
T * tmp = new T [_capacity];
memcpy(tmp, _array, sizeof(T)*_capacity);
delete[] _array;
_array = tmp;
}
}
void my_memcpy(T* dst, const T* src, size_t size)
{
if (TypeTraits <T>::__IsPODType().Get())//
{
memcpy(dst, src, size*sizeof (T));
}
else//
{
for (size_t i = 0; i < size; ++i)
{
dst[i] = src[i];
}
}
}
size_t _size;
size_t _capacity;
T *_array;
};
만약 부족 하 다 면 지적 하여 바로잡아 줄 희망 이 있다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
선형 표 (데이터 구조 가 엄격 하고 민감 하 다)텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.