Vector

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

template <class T_ELE>
class Vector {
private:
unsigned int m_size;
unsigned int m_stride;
unsigned int m_cur_idx;
T_ELE *m_p_vec;

private:
void expand();

public:
Vector();
Vector(unsigned int size, unsigned stride);
~Vector();
public:
void push(T_ELE v);
T_ELE pop(T_ELE v);
T_ELE at(unsigned int idx);
void ins(unsigned int idx, T_ELE v);
void del(T_ELE v);
void print();
};
template <class T_ELE>
void Vector<T_ELE>::print()
{
int i = 0;
for (i=0; i<m_cur_idx; i++) {
printf("%d ", m_p_vec[i]);
}
}
template <class T_ELE>
Vector<T_ELE>::Vector():m_size(5),m_stride(5),m_cur_idx(0)
{
T_ELE *m_p_vec = new T_ELE[m_size];
memset(m_p_vec, 0, sizeof(T_ELE)*m_size);
}
template <class T_ELE>
Vector<T_ELE>::Vector(unsigned int size, unsigned int stride)
:m_cur_idx(0)
{
T_ELE *m_p_vec = new T_ELE[size];
memset(m_p_vec, 0, sizeof(T_ELE)*size);
m_size = size;
m_stride = stride;
}

template <class T_ELE>
Vector<T_ELE>::~Vector()
{
delete[] m_p_vec;
}
template <class T_ELE>
void Vector<T_ELE>::push(T_ELE v)
{
if (m_cur_idx < 0 || m_cur_idx >= m_size)
expand();
memcpy(&m_p_vec[m_cur_idx], &v, sizeof(T_ELE));
m_cur_idx++;
}
template <class T_ELE>
void Vector<T_ELE>::expand()
{
T_ELE *new_p_v = new T_ELE[m_size+m_stride];
memset(new_p_v, 0, sizeof(T_ELE)*(m_size+m_stride));
memcpy(new_p_v, m_p_vec, sizeof(T_ELE)*m_size);
//print();
printf("m_size: %d, m_stride: %d, m_cur_idx: %d\n", m_size, m_stride, m_cur_idx);
delete[] m_p_vec;
printf("%d\n", __LINE__);
m_p_vec = NULL;
m_size = m_size + m_stride;
m_p_vec = new_p_v;
}
class Person {
int age;
int sex;
public:
Person()
{
age = 1;
sex = 0;
}
};
void test()
{
Vector<int> *v = new Vector<int>(3, 6);
// Vector<Person> *v = new Vector<Person>(3, 6);
Person p0, p1, p2, p3, p4;
v->push(p0);
v->push(p1);
v->push(p2);
v->push(p3);
v->print();

}
int main(int argc, char **argv)
{
test();
}

posted @ 2017-04-27 23:12  roadmap  阅读(169)  评论(0)    收藏  举报