📄 array.inl
字号:
template <class T> Array<T>& Array<T>::operator=( const Array<T>& other )
{
resize( other.m_size );
for ( int i = 0 ; i < m_size ; ++i )
m_a[i] = other.m_a[i];
return *this;
}
template <class T> void Array<T>::add( const T& item )
{
T itemcopy( item );
if ( m_size >= m_cap )
realloc(m_size+1);
m_a[m_size++] = itemcopy;
}
template <class T> void Array<T>::remove( int index )
{
assert( index >= 0 && index < size() );
rcopy( m_a+index, m_a+index+1, m_size-index-1 );
}
template <class T> void Array<T>::add( int index, const T& item )
{
assert( index >= 0 && index <= size() );
T itemcopy( item );
resize( m_size + 1 );
rcopy( m_a+(index+1), m_a+index, m_size-(index+1) );
m_a[index] = itemcopy;
}
template <class T> void Array<T>::resize( int size, const T& defaultvalue )
{
T itemcopy( defaultvalue );
if ( m_cap <= size )
realloc( size );
for ( int i = m_size ; i < size ; ++i )
m_a[i] = itemcopy;
for ( int i = size ; i < m_size ; ++i )
m_a[i] = T();
m_size = size;
}
template <class T> void Array<T>::realloc( int size )
{
int cap = m_cap * 2;
if ( cap < 16 )
cap = 16;
if ( cap < size )
cap = size;
T* data = new T[cap];
assert( data );
int count = m_size;
if ( count > cap )
count = cap;
for ( int i = 0 ; i < count ; ++i )
{
data[i] = m_a[i];
m_a[i] = T();
}
delete[] m_a;
m_a = data;
m_cap = cap;
}
template <class T> void Array<T>::rcopy( T* dst, const T* src, int count )
{
for ( int i = count-1 ; i >= 0 ; --i )
dst[i] = src[i];
}
template <class T> int Array<T>::indexOf( const T& item ) const
{
const T* begin = m_a;
const T* end = begin + m_size;
for ( const T* it = begin ; it != end ; ++it )
if ( *it == item )
return it - begin;
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -