문제
다음 함수는 매개 변수로 주어진 int 배열 src에서 배열 minus에 들어있는 같은 정수를 모두 삭제한 새로운 int 배열을 동적으로 할당받아 리턴한다. retSize는 remove() 함수의 실행 결과를 리턴하는 배열의 크기를 전달받는다.
int* remove(int src[], int sizeSrc, int minus[], int sizeMinus, int& retSize);
템플릿을 이용하여 remove를 일반화하라.
소스코드
#include<iostream>
using namespace std;
template<class T>
T* remove(T src[], T sizeSrc, T minus[], T sizeMinus, T& retSize) {
int count = 0;
for (int i = 0; i < sizeSrc; i++)
{
for (int j = 0; j < sizeMinus; j++)
{
if (src[i] == minus[j]) {
src[i] = 0; //같을때 그 값을 0으로 만들고
count++; //같은 숫자 카운트
}
}
}
int size = sizeSrc - count;
T* tmp = new T[size]; //같은개수 빼기
count = 0; //재사용
for (int i = 0; i < sizeSrc; i++)
{
if (src[i] != 0)//0이라면 추가안함
tmp[count++] = src[i];
}
retSize = count;
return tmp;
}
int main()
{
int x[] = { 1, 10, 100, 5, 4 };
int y[] = { 1,5, 200, 10 };
int retSize;
int* z = remove(x, 5, y, 4, retSize);
for (int i = 0; i < retSize; i++)
cout << z[i] << ' ';
cout << endl;
delete[] z;
}
'명품C++프로그래밍' 카테고리의 다른 글
명품 C++ Programming 실습문제 10장 7번 (0) | 2021.06.06 |
---|---|
명품 C++ Programming 실습문제 10장 5번 (0) | 2021.06.06 |
명품 C++ Programming 실습문제 10장 4번 (0) | 2021.06.06 |
명품 C++ Programming 실습문제 10장 3번 (0) | 2021.06.06 |
명품 C++ Programming 실습문제 10장 2번 (0) | 2021.06.06 |