main.cpp
#include <iostream>
#include "Arr.h"
int main()
{
tArr s1 = {};
InitArr(&s1);
for (int i = 0; i < 10; ++i)
{
PushBack(&s1, i);
}
for (int i = 0; i < s1.iCount; ++i)
{
printf("%d\n",s1.pInt[i]);
}
ReleaseArr(&s1);
return 0;
}
Arr.h
#pragma once
//ints
typedef struct _tagArr
{
int* pInt; // 포인터
int iCount; // 카운터
int iMaxCount; // 최대 카운터
}tArr;
// 배열 초기화 함수
void InitArr(tArr* _pArr);
//데이터 추가 함수
void PushBack(tArr* _pArr, int _iData);
//공간 추가 확장
void Reallocate(tArr* _pArr);
//배열 메모리 해제 함수
void ReleaseArr(tArr* _pArr);
Arr.cpp
#include "Arr.h"
#include <iostream>
//초기화
void InitArr(tArr* _pArr)
{
_pArr->pInt = (int*)malloc(sizeof(int) * 2);
_pArr->iCount = 0;
_pArr->iMaxCount = 2;
}
void Reallocate(tArr* _pArr)
{
//1. 2배 더 큰 공간을 동적할당한다.
int* pNew = (int*)malloc(_pArr->iMaxCount * 2 * sizeof(int));
//2. 기존 공간에 있던 데이터들을 새로 할당한 공간으로 복사시킨다.
for (int i = 0; i < _pArr->iCount; ++i)
{
pNew[i] = _pArr->pInt[i];
}
//3. 기존 공간은 메모리 해제
free(_pArr->pInt);
//4. 배열이 새로 할당된 공간을 가리키게 하다.
_pArr->pInt = pNew;
//5. MaxCount 변경점 적용
_pArr->iMaxCount *= 2;
}
void PushBack(tArr* _pArr, int _iData)
{
// 힙 영역에 할당한 공간이 다 참 확인
if (_pArr->iMaxCount <= _pArr->iCount)
{
//재할당
Reallocate(_pArr);
}
// 데이터 추가
_pArr->pInt[_pArr->iCount++] = _iData;
}
// 힙 영역 할당 제거
void ReleaseArr(tArr* _pArr)
{
free(_pArr->pInt);
_pArr->iCount = 0;
_pArr->iMaxCount = 0;
}
두가지 방법은 동일합니다. 포인트를 선택 할 수 있습니다.
_pArr->iCount = 0;
(*_pArr).iCount = 0;
구조체 포인트 선택
Arr.cpp (정렬) 추가
#include "Arr.h"
#include <iostream>
//초기화
void InitArr(tArr* _pArr)
{
_pArr->pInt = (int*)malloc(sizeof(int) * 2);
//(*_pArr).iCount = 0;
_pArr->iCount = 0;
_pArr->iMaxCount = 2;
}
void Reallocate(tArr* _pArr)
{
//1. 2배 더 큰 공간을 동적할당한다.
int* pNew = (int*)malloc(_pArr->iMaxCount * 2 * sizeof(int));
//2. 기존 공간에 있던 데이터들을 새로 할당한 공간으로 복사시킨다.
for (int i = 0; i < _pArr->iCount; ++i)
{
pNew[i] = _pArr->pInt[i];
}
//3. 기존 공간은 메모리 해제
free(_pArr->pInt);
//4. 배열이 새로 할당된 공간을 가리키게 하다.
_pArr->pInt = pNew;
//5. MaxCount 변경점 적용
_pArr->iMaxCount *= 2;
}
void PushBack(tArr* _pArr, int _iData)
{
// 힙 영역에 할당한 공간이 다 참 확인
if (_pArr->iMaxCount <= _pArr->iCount)
{
//재할당
Reallocate(_pArr);
}
// 데이터 추가
_pArr->pInt[_pArr->iCount++] = _iData;
}
// 힙 영역 할당 제거
void ReleaseArr(tArr* _pArr)
{
free(_pArr->pInt);
_pArr->iCount = 0;
_pArr->iMaxCount = 0;
}
void Sort(tArr* _pArr)
{
//데이타가 1개 이하인
if (_pArr->iCount <= 1)
return;
//오름차순 정렬
while (true)
{
bool bFinish = true;
int iLoop = _pArr->iCount - 1;
for (int i = 0; i < iLoop; ++i)
{
if (_pArr->pInt[i] > _pArr->pInt[i + 1])
{
int iTemp = _pArr->pInt[i];
_pArr->pInt[i] = _pArr->pInt[i + 1];
_pArr->pInt[i + 1] = iTemp;
bFinish = false;
}
}
if (bFinish)
break;
}
}
'C,C++' 카테고리의 다른 글
C,C++ 템플릿 (0) | 2023.07.17 |
---|---|
C,C++ 기초 CLASS / STRUCT (0) | 2023.07.16 |
C,C++기초 리스트 (0) | 2023.07.15 |
C,C++기초 함수 포인터 (0) | 2023.07.15 |
C언어의 기초 문법 (0) | 2023.07.12 |