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