자료구조/by C

c언어 vector 구현

견우직녀달 2023. 6. 24. 01:51

c++ vector를 c언어에서도 쓰고 싶어서 간단하게 만들어 봤습니다.

#include <stdlib.h>
typedef long long ll;

typedef struct node{//해당하는 값을 arr로 갖는다.
    int v;
}node;

typedef struct vector{//인덱스 접근 가능해야 하며, size 존재, back, pop_back,
    node* arr;//값을 저장하는 곳
    ll size;//크기
    ll capacity;//전체 크기
}vector;

void init(vector *q){
    q->arr=(node *)malloc(sizeof(node)*(64));
    q->size=0;
    q->capacity=64;//초기 크기 64개
}

void push_back(vector *q,int v){//v가 추가되기.
    if(q->size+1<=q->capacity){//
        q->arr[q->size].v=v;
    }else{
        ll new_size= q->capacity*2;
        q->arr = (node*)realloc(q->arr,sizeof(node)*new_size);
        q->arr[q->size].v=v;
        q->capacity=new_size;
    }
    q->size++;//크기 증가
}

void pop_back(vector *q){
    if(q->size){//없을 때는 불러내면 안됨.
        q->size--;//값 줄이기
    }else{
        printf("size가 0이므로 더이상 못 뺌\n");
    }
}

node* back(vector *q){
    node* ret = &q->arr[q->size-1];
    return ret;//값 넘겨주기
}

해당하는 node부분에서 내가 사용하고자 하는 자료형들을 모아놓고 사용하시면 됩니다.

당연히 인덱스 접근할 수 있구요.

vector->arr[] 이런 식으로 인덱스 접근하시면 됩니다.

 

(feat. 히히 이제부터 vector 써야징 헤헿헤헿)