3️⃣ 필수 기능 가이드
- 클래스의 이름은 SimpleVector라고 합니다.
- 타입에 의존하지 않고 데이터를 받을수 있는 배열을 멤버변수로 갖습니다.
- 생성자는 아래와 같이 구현 합니다.
- 기본 생성자는 크기가 10인 배열을 만듭니다.
- 숫자를 하나 받는 생성자는 해당 숫자에 해당되는 크기의 배열을 만듭니다.
- 아래와 같은 멤버함수를 구현 합니다.
- push_back 인자로 받은 원소를 맨 뒤에 추가 합니다. 반환값은 없습니다. 배열의 크기가 꽉 찼는데 원소가 더 들어올경우 아무 동작도 하지 않습니다.
- pop_back은 벡터의 마지막 원소를 제거 합니다. 만약 제거할 원소가 없다면 아무 동작도 하지 않으며, 인자 및 반환값은 없습니다.
- size는 인자가 없고 현재 원소의 개수를 반환합니다.
- capacity 현재 내부 배열의 크기를 반환합니다.
4️⃣ 도전 기능 가이드
필수 기능을 모두 완료한 후, 아래 기능을 추가 합니다.
- 복사 생성자를 구현 합니다.
- 아래 멤버함수를 추가로 변경/구현 합니다.
- push_back에서 배열의 크기가 꽉 찼는데 원소가 더 들어올경우, 기존 배열보다 크기를 5만큼 더 늘리고 새로운 원소까지 추가됩니다.(기존에 있던 값도 유지되야 합니다.)
- resize는 정수 하나를 인자로 받습니다. 해당 정수가 현재 배열의 크기보다 작으면 아무 동작도 하지 않습니다. 만약 현재 배열보다 크기가 크면 해당 값만큼 크기를 재할당 합니다.(기존 원소는 그대로 있어야 합니다.)
- sortData는 내부 데이터를 정렬하는 함수 입니다. 직접 정렬하지 않고 STL의 sort함수를 활용해서 정렬 합니다.
//심플 벡터 만들기
#include <iostream>
#include <algorithm>
using namespace std;
template <typename T>
class SimpleVector {
private:
T* data;
int currentSize; //현재 원소 갯수
int currentCapacity; // 최대 길이
void resize(int newCapacity) {//프라이빗 함수
T* newdata = new T[newCapacity]; //최대길이+5의 길이인 새로운 배열 생성
for (int i = 0; i < currentSize; i++) {//기존배열 복사해오기
newdata[i] = data[i];
}
delete[] data;//기존 배열 삭제
data = newdata;//배열 업데이트
currentCapacity = newCapacity;//사이즈 업데이트
}
public:
SimpleVector() {
data = new int[10];
}
SimpleVector(int capacity) {
data = new int[currentCapacity];
}
~SimpleVector() {
delete[] data;
}
void push_back(const T& value) {
if (currentSize >= currentCapacity) {
resize(currentCapacity+5);
}
data[currentSize] = value;
currentSize++;
}
void pop_back() {
if (currentSize <= 0) {
cout << "제거 할 원소 없음" << endl;
}
else
currentSize--;
}
int size() {
return currentSize;
}
int capacity() {
return currentCapacity;
}
void sortData() {
sort(data, data + currentSize);
}
const T& operator[](int index) const {
return data[index];
}
};
int main() {
// SimpleVector<int>의 기본 생성자 사용
SimpleVector<int> vec;
// 요소 추가 (push_back)
while(1){
cout << "요소를 추가하세요 0을 누르면 중단합니다" << endl;
int num = 0;
cin >> num;
vec.push_back(num);
if (num == 0) {
break;
}
}
// 현재 크기와 용량 출력
cout << "Size: " << vec.size() << endl;
cout << "Capacity: " << vec.capacity() << endl;
// 데이터 정렬
cout << "vec: ";
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
vec.sortData();
cout << "orting: ";
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
// 마지막 요소 제거
vec.pop_back();
cout << "pop_back: ";
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
cout << endl;
return 0;
}
'내일배움캠프🔥 > 퀘스트✔️' 카테고리의 다른 글
[ 내일배움캠프 ] 4. C++ Summary (0) | 2025.01.04 |
---|---|
[ 내일배움캠프 ] 2. OOP Summary (0) | 2024.12.30 |
[ 내일배움캠프 ] 1. 간단한 프로그래밍 구현하기 (0) | 2024.12.30 |
[ 내일배움캠프 ] 내가 생각한 게임 개발자는? 🎮 (0) | 2024.12.12 |