-
[C++]_12_(template STL 예외처리),(콘솔 파일 입출력)c++ 2024. 12. 2. 16:44







1.비슷한 클래스가 있으면 하나만 남겨두고 나머지를 지운다.
2. class 앞에 template이라고 쓴다.
3.나머지 template구조를 써준다.

아래는 자료구조에서 사용하는 기본 자료구조와 STL의 대응 자료구조를 비교한 표입니다:
자료구조 자료구조의 설명 STL 자료구조 STL의 주요 특징
배열 (Array) 크기가 고정된 연속된 메모리 블록. 인덱스를 통해 접근 가능 std::array 고정 크기 배열, 컴파일 시간에 크기 지정 동적 배열 크기가 가변적으로 변경 가능한 배열 std::vector 크기 자동 관리, 임의 접근 가능, 메모리 재할당 관리 연결 리스트 (Linked List) 각 노드가 데이터와 다음 노드를 가리키는 포인터로 구성 std::list 이중 연결 리스트, 빠른 삽입 및 삭제 스택 (Stack) LIFO 구조 (후입선출) std::stack vector, deque, list 기반으로 동작 가능 큐 (Queue) FIFO 구조 (선입선출) std::queue deque 기반, 선입선출 방식 우선순위 큐 (Priority Queue) 우선순위에 따라 요소를 정렬해 처리 std::priority_queue 힙(heap) 기반, 최대값 또는 최소값 우선 접근 가능 덱 (Deque) 양쪽 끝에서 삽입과 삭제가 가능한 자료구조 std::deque 양쪽 끝에서 O(1) 삽입 및 삭제 집합 (Set) 중복되지 않은 유일한 요소의 집합 std::set, std::unordered_set set: 이진 트리 기반unordered_set: 해시 기반 맵 (Map) 키-값 쌍으로 구성된 연관 배열 std::map, std::unordered_map map: 이진 트리 기반unordered_map: 해시 기반 트리 (Tree) 계층적인 구조로 데이터를 관리 직접 구현 필요 (std::map 유사) STL에는 특정 트리 자료구조가 없음 (AVL, B-Tree 등 직접 구현) 그래프 (Graph) 노드와 간선으로 구성된 데이터 구조 직접 구현 필요 STL에 제공되지 않음 (사용자 정의 구현 필요) 해시 테이블 (Hash Table) 키를 해시 함수로 변환해 데이터를 저장 std::unordered_map, std::unordered_set 해시 기반, 빠른 탐색과 삽입/삭제
비교 요약
- 자료구조는 구현의 유연성이 높고, 특정 문제 상황에 맞게 최적화할 수 있습니다.
- STL은 미리 구현된 자료구조를 제공하여 개발 시간을 단축하고, 성능이 최적화된 구현체를 사용할 수 있습니다.
- STL에서는 트리, 그래프 등 복잡한 자료구조는 포함하지 않으므로, 직접 구현이 필요합니다.








!mo는 mo==0이라는 뜻이다 #include <iostream> using std::cout; using std::cin; using std::endl; // 분자를 ja, 분모를 mo로 받아 나눗셈을 수행하는 함수 void Div(double ja, double mo) { try { // 1단계: try 블록으로 예외가 발생할 가능성이 있는 코드를 감싼다. if (mo == 0) throw mo; // 2단계: 분모가 0이면 예외를 발생시킴. 던지는 값은 `mo`. cout << "결과: " << ja / mo << endl; // 나눗셈 결과를 출력 } catch (double) { // 3단계: 예외 처리. 던져진 값이 double 형식에 해당하는 catch 블록이 실행됨. cout << "오류! 0으로 나눌 수 없음! " << endl; // 에러 메시지 출력 } } int main() { double x, y; // 사용자로부터 입력받을 분자와 분모 // 사용자로부터 분자 입력 받기 cout << "분자를 입력하세요="; cin >> x; // 사용자로부터 분모 입력 받기 cout << "분모를 입력하세요="; cin >> y; // Div 함수 호출 Div(x, y); return 0; // 프로그램 정상 종료 }
코드 설명
1. try 블록
- try 블록 안의 코드는 예외가 발생할 가능성이 있는 부분을 감싸고 있습니다.
- 여기에서는 분모(mo)가 0일 경우 예외를 던지는 코드를 작성했습니다.
2. throw
- throw mo는 예외를 던지는 역할을 합니다.
- 여기서는 mo의 값(즉, 0)을 던지며, 이를 catch 블록에서 처리합니다.
3. catch 블록
- catch (double)은 throw로 던져진 double 형식의 예외를 처리합니다.
- 예외가 발생하면 "오류! 0으로 나눌 수 없음!"이라는 메시지를 출력합니다.
4. main() 함수
- 사용자로부터 분자(x)와 분모(y) 값을 입력받습니다.
- Div(x, y)를 호출하여 나눗셈을 수행하거나 예외를 처리합니다.
주요 개념
- try-catch 구조:
- try 안에서 예외가 발생하면 catch가 이를 처리합니다.
- throw:
- 특정 조건에서 예외를 던져 프로그램 흐름을 catch로 이동시킵니다.
- 예외 처리의 장점:
- 에러가 발생해도 프로그램이 비정상 종료되지 않고 적절히 처리됩니다.






*1학년 2학기 C++ 과목을 통해서 객체지향언어의 기본적인 문법을 익혔습니다. C++11이후 바뀐 모던 C++의 특징에 대해서도 학습하였습니다.*클래스를 통해 캡슐화하는 방법, 다형성으로 함수 오버로딩, 상속과 overriding을 통해 코드 재사용 등의 특징을 학습했습니다.*또한, template, STL, exception handing, 파일 입출력 등의 문법도 익혀서 C++로 실무 프로젝트를 진행하는데 무리가 없도록 기본 문법을 확실히 이해하고 있습니다.*포트폴리오?*구글링/AI : C++ stl file 성적처리*직접 만드는 것도 좋지만 좋은 소스를 많이 보고 만들기*블로그 관리(저작권, 복붙, 비공개, 꾸준, 습관)

'c++' 카테고리의 다른 글
[C++]_11_overriding static (0) 2024.11.25 [C++]_10_상속 (1) 2024.11.18 [C++]_09_(함수중첩 디폴트 인자) (0) 2024.11.11 [C++]_08_const, new (0) 2024.11.04 [C++_07_객체와 멤버, 배열, 생성자, 소멸자, this] (0) 2024.10.28