🧼C, C++/자료구조

자료구조 만들기 [Vector] C++

Mawile 2020. 11. 8.
728x90

 

개발환경 >> DevCpp

언어 >> C++11

운영체제 >> Windows10

 


 

 

안녕하세요~!~!~!!

이번에는 자료구조를 만들어볼 건데

생각 없이 만들다가 그냥 완성한 거긴 하지만,,..

 

일단 방식은 LIFO (Last In First Out)입니다~

뭐를 만든 건지는 모르겠지만!!ㅋㅋㅋ

 

그러면 원리 설명 및 함수들 사용방법 알려드리겠습니다!!

 

 


 

 

[[[   원리 설명   ]]]

template <typename T> class dpVec{
private:
	int size,maxsize;
	T *data=NULL;
public:
	dpVec() : size(0) , maxsize(1) , data(0) { } //생성자
	~dpVec(){ size=0,maxsize=1; delete[] data; } //소멸자
	void push(T t){ //데이터 삽입 (현재인덱스에다가 값을 삽입하고 size+1)
		if(size+1>=maxsize){
			maxsize *=2;
			T *tmp = new T[maxsize];
			for(int i=0;i<size;i++) tmp[i]=data[i];
			tmp[size++]=t;
			delete[] data;
			data=tmp;
		}
		else data[size++]=t;
	}
	void clear(){ //데이터 전체소거
		size=0;
		maxsize=1;
		delete[] data;
		
		data = new T[1];
	}
	void print(){ //데이터 내용출력
		for(int i=0;i<size;i++) cout << data[i] << " ";
		cout << endl;
	}
	void insert(int index,T t){ if(index<size) data[index]=t; } //데이터 특정인덱스에다가 값삽입
	int length()const{ return this->size; } //데이터양 반환
	void pop() { if(size>0) data[--size]='\0'; } //데이터소거
	
	T& operator[](const int index){ return data[index]; } //[]연산자오버로딩
};

 

 

 

우선 클래스 이름은 "dpVec"이며 한 번 더 말씀드리는데 LIFO방식으로 데이터를 관리합니다!

 

 

존재하는 함수, 오버로드들은

 

push(T t)

clear()

print()

insert(int index, T t)

length()

pop()

[]연산자

 

입니다.

밑에는 이제 이것을 어떻게 사용하는지 알려드리겠습니다~!

 

 

 


 

[[[   dpVec.h   ]]]

#ifndef __dpVec__
#define __dpVec__

#include <iostream>
using namespace std;

template <typename T> class dpVec{
private:
	int size,maxsize;
	T *data=NULL;
public:
	dpVec() : size(0) , maxsize(1) , data(0) { }
	~dpVec(){ size=0,maxsize=1; delete[] data; }
	void push(T t){
		if(size+1>=maxsize){
			maxsize *=2;
			T *tmp = new T[maxsize];
			for(int i=0;i<size;i++) tmp[i]=data[i];
			tmp[size++]=t;
			delete[] data;
			data=tmp;
		}
		else data[size++]=t;
	}
	void clear(){
		size=0;
		maxsize=1;
		delete[] data;
		
		data = new T[1];
	}
	void print(){
		for(int i=0;i<size;i++) cout << data[i] << " ";
		cout << endl;
	}
	void insert(int index,T t){ if(index<size) data[index]=t; }
	int length()const{ return this->size; }
	void pop() { if(size>0) data[--size]='\0'; }
	
	T& operator[](const int index){ return data[index]; }
};

#endif

[[[   dpVec.cpp   ]]]

 

#include "dpVec.h"

int main(){
	dpVec<const char *>dp;
	dp.push("t0");
	dp.push("t1");
	dp.push("t2");
	dp.push("t3");
	dp.push("t4");
	dp.pop();
	dp.print();
	cout << dp.length() << endl;
	
	dp.insert(2,"t6");
	dp[3]="t8";
	dp.print();
	cout << dp.length() << endl;
	
	dp.clear();
	dp.print();
	cout << dp.length();
}

 

실행화면

 

 

 

 

 

이해가 안 가시는 부분 있으면 댓글로 질문 주세요!!!

그럼 다음 글에서 만나보도록 하겠습니다

 

감사합니다!!

728x90

댓글