#include <iostream>
#include <assert.h>
#include <Windows.h>
using namespace std;
template<class T>
class vector
{
public:
vector()
{
m_pData = nullptr;
m_uSize = 0;
}
virtual ~vector(){}
void insert( const int c_iIndex, T data )
{
int iTmpIndex = c_iIndex;
if( iTmpIndex < 0 )
{
iTmpIndex = 0;
}
if( iTmpIndex >= m_uSize )
{
iTmpIndex = m_uSize;
}
auto transform = new T[ m_uSize + 1 ];
memcpy( transform, m_pData, iTmpIndex * sizeof( T ) );
transform[ iTmpIndex ] = data;
memcpy( transform + iTmpIndex + 1, m_pData + iTmpIndex, ( m_uSize - iTmpIndex ) * sizeof( T ) );
delete []m_pData;
m_pData = transform;
m_uSize++;
}
void push_back( T data )
{
insert( m_uSize, data );
}
void push_front( T data )
{
insert( 0, data );
}
void deleteByData( T data )
{
unsigned int uCount = 0;
for( int i = 0; i < m_uSize; i++ )
{
if( m_pData[i] != data )
{
memcpy( m_pData + uCount, m_pData + i, sizeof( T ) );
uCount++;
}
}
m_uSize = uCount;
}
void deleteByIndex( const int c_iIndex )
{
if( c_iIndex < 0 || c_iIndex >= m_uSize )
{
return;
}
memcpy( m_pData + c_iIndex, m_pData + c_iIndex + 1, ( m_uSize - c_iIndex - 1 ) * sizeof( T ) );
}
T operator []( const int c_iIndex )
{
if( c_iIndex < 0 || c_iIndex >= m_uSize )
{
assert( 0 );
}
return *( m_pData + c_iIndex );
}
unsigned int size()
{
return m_uSize;
}
void print()
{
for( int i = 0; i < m_uSize; i++ )
{
cout << m_pData[i] <<endl;
}
}
private:
T* m_pData;
unsigned int m_uSize;
};
struct tmp
{
tmp( int number )
{
this->number = number;
}
int number;
};
void main()
{
vector< int > v;
v.push_back( 55 );
v.push_back( 66 );
v.push_front( 77 );
v.insert( 1, 99 );
v.push_back( 66 );
v.deleteByIndex( 0 );
v.print();
cout << v.size() <<endl;
vector< tmp* > vtmp;
vtmp.push_back( new tmp( 100 ) );
cout << vtmp[ 0 ]->number <<endl;
system( "pause" );
}
完毕,如有更精简之处,望不吝赐教。。