🧼C, C++/자료구조
자료구조 만들기 [Vector] C++
개발환경 >> 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();
}
이해가 안 가시는 부분 있으면 댓글로 질문 주세요!!!
그럼 다음 글에서 만나보도록 하겠습니다
감사합니다!!
'🧼C, C++ > 자료구조' 카테고리의 다른 글
문자열 자르기 < c++20 / concept / requires > (0) | 2021.06.19 |
---|---|
자료구조 만들기 [Dictionary] C++ (0) | 2021.01.19 |
#예고편# 자료구조 만들기 C++ [Dictionary] (0) | 2021.01.18 |
댓글