본문 바로가기
카테고리 없음

벡터 구현 (심플)

by ByteBridge 2013. 3. 10.
반응형



///header

#pragma  once


template<typename T >

class MyVector

{

public:

int m_numElements;

int m_currentSize;

T *m_pData;


MyVector(int nMaxElements)

{

m_numElements = nMaxElements;

m_pData = new T[nMaxElements];

m_currentSize = -1;

}


int GetLength()

{

return m_currentSize + 1; // Add 1 as it is zero based index

}


// Adds the element at the end

bool AddElement(T data)

{

m_currentSize++;

if(m_currentSize - 1 >= m_numElements)

return false; // Maximum threshold reached

m_pData[m_currentSize] = data;

return true;

}


// 0 based index

bool ModifyElement(int pos, T data)

if(pos <= m_currentSize)

{

m_pData[pos] = data;

return true;

}

return false;

}


bool DeleteElement()

{

if(m_currentSize < 0)

return false; // 벡터에 데이터가 없으면 false

m_currentSize--;

return true;

}


T operator [] (int index)

{

if(index > m_currentSize)

throw -1;

return m_pData[index];

}


void DisplayVector()

{

for(int i = 0; i < GetLength(); i++)

{

std::cout << m_pData[i];

if(  i == GetLength() - 1)

std::cout << "\n";

else

std::cout << ", ";

}

}


void MultiplyValues(T value)

{

for(int i = 0; i < GetLength(); i++)

{

m_pData[i] *= value;

}

}


};


==================

// 벡터구현.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.

//


#include "stdafx.h"

#include "MyVector.h"


int _tmain(int argc, _TCHAR* argv[])

{


MyVector<double> vec(10);

//벡터에 double 형 데이터 4개 추가

vec.AddElement(12.5);

vec.AddElement(12.6);

vec.AddElement(12.7);

vec.AddElement(12.8);


//추가된 데이터 출력

cout << "벡터에 4개의 데이터 추가"<<endl;

vec.DisplayVector();

//컨테이너에 저장된 각각의 값들을 10으로 곱

cout << "벡터의 각 값들을 10배"<<endl;

vec.MultiplyValues(10);

vec.DisplayVector();



cout << "벡터의 값 두개를 삭제"<<endl;

vec.DeleteElement();

vec.DeleteElement();

vec.DisplayVector();


cout << "벡터에 3개의 데이터 추가"<<endl;

vec.AddElement(22.7);

vec.AddElement(22.8);

vec.AddElement(22.9);

//벡터길이 만큼 출력

for(int i = 0; i < vec.GetLength(); i++)

std::cout << vec[i] << "  ";


cout << "  ";


return 0;

}


반응형