-
명품 C++ 10장 6번C++ 2018. 11. 17. 01:40
6. 다음 함수는 매개 변수로 주어진 int 배열을 src에서 배열 minus에서 배열 minus에 들어있는 같은 정수를 모두 삭제한 새로운 int 배열을 동적으로 할당받아 리턴한다. resSize는 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[], int sizeSrc, T minus[], int sizeMinus, int & retsize) {bool sw; // src 배열과 minus배열의 원소가 같은게 있는지 판별하는 변수T *p = new T[sizeSrc];for (int i = 0; i < sizeSrc; ++i) { // src 배열의 원소가sw = true;for (int j = 0; j < sizeMinus; ++j) { // minus 배열중에서if (src[i] == minus[j]) { // 같은게 있다면 sw = falsesw = false;break; // 같은게 있다면 다음 src 원소로}}if (sw) { // 같은게 없이 조건문으로 온다면 같은게 없으므로p[retsize] = src[i]; // 새로 리턴할 배열에 원소 추가++retsize; // 리턴할 배열의 size증가}}return p;}int main() {int a[] = { 1,2,3,4,5,6,7,8,9,10 };int b[] = { 5,6,7,8,9 };int size=0;int *p = remove(a, 10, b,5, size); // 동적 생성for (int i = 0; i < size; ++i)cout << p[i] << ' ';cout << endl;delete[] p; // 메모리 반환size = 0;char c[] = { 'a','b','i','m','c','d','e',};char d[] = { 'k','i','m','n','u' };char *q = remove(c, 7, d, 5,size); // 동적 생성for (int i = 0; i < size; ++i)cout << q[i] << ' ';cout << endl;delete[] q; // 메모리 반환}실행결과
함수의 일반화와 템플릿 함수 만들기를 이용하는 문제입니다.
remove 함수에 대해서는 주석에 설명을 작성했습니다.
'C++' 카테고리의 다른 글
명품 C++ 10장 8번 (0) 2018.11.17 명품 C++ 10장 7번 (0) 2018.11.17 명품 C++ 10장 5번 (0) 2018.11.17 명품 C++ 10장 4번 (0) 2018.11.16 명품 C++ 10장 3번 (0) 2018.11.16