C++STL库的Vector容器简单实现的源代码参考

#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" );
}

完毕,如有更精简之处,望不吝赐教。。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值