C++
-
명품 C++ 10장 9번C++ 2018. 11. 17. 02:23
9. STL의 vector 클래스를 이용하는 간단한 프로그램을 작성해보자. vector 객체를 생성하고, 키보드로부터 정수를 입력받을 때마다 정수를 벡터에 삽입하고 지금까지 입력된 수와 평균을 출력하는 프로그램을 작성하라. 0을 입력하면 프로그램이 종료한다. 소스코드 #include #include using namespace std;int main() { vector v; for (;;) { int n; int sum = 0; double ave; cout > n; if (n == 0) break; // 0을 입력 받으면 프로그램 종료 v.push_back(n); // 입력 받은 정수를 v객체에 삽입 for (int i = 0; i < v.size(); ++i) { sum += v[i]; // 평균을 ..
-
명품 C++ 10장 8번C++ 2018. 11. 17. 02:12
8. 문제 7을 푸는 다른 방법을 소개한다. bigger() 함수의 다음 라인에서 > 연산자 때문에if(a>b) return a; T에 Circle과 같은 클래스 타입이 대입되면, 구체화가 실패하여 컴파일 오류가 발생한다. 이 문제를 해결하기 위해 다음과 같은 추상 클래스 Comparalbe을 제안한다. class Comparalbe { // 추상 클래스public: virtual bool operator > (Comparalbe& op2) = 0; // 순수 가상 함수 virtual bool operator < (Comparalbe& op2) = 0; // 순수 가상 함수 virtual bool operator == (Comparalbe& op2) = 0; // 순수 가상 함수}; Circle 클래스가..
-
명품 C++ 10장 7번C++ 2018. 11. 17. 01:53
7. 다음 프로그램은 컴파일 오류가 발생한다. 소스의 어디에서 왜 컴파일 오류가 발생하는가? #include using namespace std;class Circle { int radius;public: Circle(int radius = 1) { this->radius = radius; } int getRadius() { return radius; }};template T bigger(T a, T b) { // 두 개의 매개 변수를 비교하여 큰 값을 리턴 if (a > b) return a; else return b;}int main() { int a = 20, b = 50, c; c = bigger(a, b); cout b) return a; else return b;}int main() { int..
-
명품 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 using namespace std;template T * remove(T src[], int sizeSrc, T minus[], int sizeMinus, int & retsize) { bool sw; // src 배열과 m..
-
명품 C++ 10장 5번C++ 2018. 11. 17. 01:10
5. 다음 함수는 매개 변수로 주어진 두 개의 int 배열을 연결한 새로운 int 배열을 동적 할당 받아 리턴한다. int * concat(int a[],int sizea, int b[], int sizeb); concat가 int 배열뿐 아니라 다른 타입의 배열도 처리할 수 있도록 일반화하라. 소스코드 #include using namespace std;template T * concat(T a[], int sizea, T b[], int sizeb) { // 배열 합쳐서 새로운 배열 리턴 T *p = new T[sizea + sizeb]; for (int i = 0; i < sizea; ++i) p[i] = a[i]; for (int i = sizea; i < sizea + sizeb; ++i) p[..
-
명품 C++ 10장 4번C++ 2018. 11. 16. 22:51
4. 배열에서 원소를 검색하는 search() 함수를 템플릿으로 작성하라. search() 의 첫 번째 매개 변수는 검색하고자 하는 원소 값이고, 두 번째 매개 변수는 배열이며, 세 번째 매개 변수는 배열의 개수이다. search() 함수가 검색에 성공하면 true를, 아니면 false를 리턴한다. search() 호출 사례는 다음과 같다. 소스코드 #include using namespace std;template bool search(T data, T x[], int n) { for (int i = 0; i < n; ++i) { if (data == x[i]) return true; } return false;}int main() { int x[] = { 1,10,100,5,4 }; if (searc..
-
명품 C++ 10장 3번C++ 2018. 11. 16. 22:44
3. 배열의 원소를 반대 순서로 뒤집는 reverseArray() 함수를 템플릿으로 작성하라. reverseArray()의 첫 번째 매개 변수는 배열에 대한 포인터이며 두 번째 매개 변수는 배열의 개수이다. reverseArray() 호출 사례는 다음과 같다. 소스코드 #include using namespace std;template void reverseArray(T x[], int n) { for (int i = 0; i < n / 2; ++i) { T tmp; tmp = x[i]; x[i] = x[n - i - 1]; x[n - i - 1] = tmp; }}int main() { int x[] = { 1,10,100,5,4 }; int y[] = { 1,10,100,4 }; reverseArray..
-
명품 C++ 10장 2번C++ 2018. 11. 16. 22:28
2. 두 개의 배열을 비교하여 같으면 true를, 아니면 false를 리턴하는 제네릭 함수 equalArrays()를 작성하라. 또한 main() 함수를 작성하여 equalArrays()를 호출 하는 몇 가지 사례를 보여라. equalArrays()를 호출하는 코드 사례는 다음과 같다. 소스코드 #include using namespace std;template bool equalArrays(T x[], T y[], int n) { // 배열이 같은지 확인하는 함수 for (int i = 0; i < n; ++i) { if (x[i] != y[i]) return false; } return true;}int main() { int x[] = { 1,10,100,5,4 }; // 비교할 두 int 배열 i..