반응형

문제

다음 함수는 매개 변수로 주어진 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;
}
반응형

+ Recent posts