반응형

문제

다음 함수는 매개 변수로 주어진 두 개의 int 배열을 연결한 새로운 int 배열을 동적 할당 받아 리턴한다.

int* concat(int a[], int sizea, int b[], int sizeb);

concat가 int 배열뿐 아니라 다른 타입의 배열도 처리할 수 있도록 일반화하라.

 

소스코드

#include<iostream>
using namespace std;

template <class T>
T* concat(T a[], T sizea, T b[], T sizeb) {
	T* z = new T[sizea + sizeb];

	for (int i = 0; i < sizea+sizeb; i++)
	{
		if (i < sizea)
			z[i] = a[i];
		else
			z[i] = b[i-sizea];
	}
	return z;
}

int main() {
	int x[] = { 1, 10, 100, 5, 4 };
	int y[] = { 2, 20, 200, 10, 8 };
	int* a = concat(x, 5, y, 5);

	for (int i = 0; i < 10; i++)
		cout << a[i] << ' ';
        delete [] a;
}
반응형
반응형

문제

배열에서 원소를 검색하는 search() 함수를 템플릿으로 작성하라. search()의 첫번째 매개 변수는 검색하고자 하는 원소 값이고, 두 번째 매개 변수는 배열이며, 세 번째 매개 변수는 배열의 개수이다. search() 함수가 검색에 성공하면 true를, 아니면 false를 리턴한다. search()의 호출 사례는 다음과 같다.

 

메인함수

int x[] = { 1,10,100,5,4 };
if (search(100, x, 5))cout < , "100이 배열 x에 포함되어 있다."; // 이 cout 실행
else cout << "100이 배열 x에 포함되어 있지 않다";

 

소스코드

#include<iostream>
using namespace std;
template<class T>
T search(T n,T x[],T size) {
	for (int i = 0; i < size; i++)
		if (x[i] == n)
			return true; //맞는 값이 있으면 true리턴
	return false; //아니면 false 리턴
}

int main() {
	int x[] = { 1,10,100,5,4 };
	if (search(100, x, 5))cout << "100이 배열 x에 포함되어 있다."; // 이 cout 실행
	else cout << "100이 배열 x에 포함되어 있지 않다";
}
반응형
반응형

문제

배열의 원소를 반대 순서로 뒤집는 reverseArray() 함수를 템플릿으로 작성하라.

reverseArray()의 첫 번째 매개 변수는 배열에 대한 포인터이며 두 번째 매개 변수는 배열의 개수이다. reverseArray()의 호출 사례는 다음과 같다.

 

메인함수

int x[] = { 1,10,100,5,4 };
	reverseArray(x, 5);
	for (int i = 0; i < 5; i++)	cout << x[i] << ' '; // 4 5 100 10 1 이 출력된다.

 

소스코드

#include<iostream>
using namespace std;
template<class T>
void reverseArray(T x[], T n) {
	for (int i = 0, j = n - 1; i < n/2; i++, j--)
	{
		T tmp = x[i];
		x[i] = x[j];
		x[j] = tmp;
	}
}

int main() {
	int x[] = { 1,10,100,5,4 };
	reverseArray(x, 5);
	for (int i = 0; i < 5; i++)	cout << x[i] << ' '; // 4 5 100 10 1 이 출력된다.
}
반응형

+ Recent posts