stack C++ 표준 라이브러리의 std::stack은 스택(stack)을 구현한 어댑터 컨테이너이다. 스택은 LIFO(Last In, First Out) 데이터 구조로, 가장 최근에 삽입된 요소가 가장 먼저 제거된다. std::stack은 기본적으로 다른 컨테이너(주로 std::deque, std::list, std::vector)를 내부적으로 사용하여 스택을 구현. stack 기본 사용법 헤더 파일 포함 #include 스택 선언 std::stack myStack; // int 형 스택 선언 원소 추가 → push(): 스택의 상단에 원소를 추가. myStack.push(10); myStack.push(20); myStack.push(30); 원소 제거 → pop(): 스택의 상단에 있는 원소를 제..
c++
list → C++의 std::list는 이중 연결 리스트를 구현한 컨테이너로, 데이터를 삽입, 삭제, 검색하는데 효율적이다. std::list는 벡터와는 달리 임의 접근이 느리지만, 원소를 삽입하거나 삭제하는데 있어서는 훨씬 효율적이다. 아래는 std::list를 사용하는 기본적인 방법이다. 헤더 파일 #include 리스트 선언 std::list myList; // int 형 리스트 선언 원소 추가 → push_back(): 리스트의 끝에 원소를 추가. → push_front(): 리스트의 시작에 원소를 추가. myList.push_back(10); myList.push_front(5); 원소 삭제 → pop_back(): 리스트의 끝에 있는 원소를 삭제. → pop_front(): 리스트의 시작에 ..
vector 기본 사용법 → std::vector는 가변 크기의 배열을 나타내는 C++ 표준 라이브러리 컨테이너이다. 이는 배열과 유사하지만 크기를 동적으로 조정할 수 있는 장점을 가지고 있습니다. 아래는 std::vector를 사용하는 기본적인 방법이다. 헤더 파일 #include 벡터 선언 std::vector myVector; // int 형 벡터 선언 원소 추가 myVector.push_back(5); // 벡터 끝에 원소 추가 원소 접근 → [] 연산자를 사용하여 인덱스를 통해 원소에 접근. → at() 함수를 사용하여 범위 검사를 수행하면서 원소에 접근. int element = myVector[0]; // 첫 번째 원소에 접근 int element2 = myVector.at(1); // 두 ..
STL(Standard Template Library)이란? → 프로그램에 필요한 자료구조와 알고리즘을 Template로 제공하는 라이브러리 STL은 C++을 위한 라이브러리로 알고리즘, 컨테이너, 함수자, 반복자 4가지로 구성되어 있다. STL 의 구성요소 Container객체를 저장하는 객체, 자료구조 라고도 한다. 클래스 템플릿으로 구현되어있다.container는 크게 sequence container, associative container로 나뉜다. Sequence Container 의 종류 : array (C++ 11), vector, list, deque Associative Container 의 종류 : set, multiset, map, multimap Iterator포인터와 비슷한 개념..
→ 템플릿은 함수나 클래스를 개별적으로 다시 작성하지 않아도, 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 것. 함수 템플릿(Function Template), 클래스 템플릿(Class Template)로 나뉜다. 좀 더 쉽게 템플릿을 설명한다면, 우리는 자료형이라는 게 있다. 이 자료형에 맞게 함수를 작성하거나 매개변수로 넘길 때도 자료형에 맞게 넘겨준다. 그런데 템플릿은 이 자료형을 전부 통합할 수 있다는 이야기이다. 템플릿은 컴파일 타임에 코드를 생성하기 때문에 런타임 오버헤드가 없다. 그러나 컴파일러가 템플릿 코드를 컴파일하는 동안 많은 코드가 생성될 수 있으므로 템플릿을 남용하면 컴파일 시간이 길어질 수 있다. 또한, 템플릿을 사용할 때 특정한 데이터 타입에 대해 원하는 동작을 보장하기..
dynamic_cast는 주로 다형성(polymorphism)과 관련이 있다. 이 연산자는 런타임에 안전한 형변환을 수행한다. 즉, 동적으로 객체의 타입을 확인하고, 그 결과에 따라 적절한 형변환을 수행한다. 주로 상속과 가상 함수(Virtual Functions)를 사용하는 클래스 계층 구조에서 사용된다. dynamic_cast의 기본 형태 new_type은 형변환하고자 하는 새로운 타입을 나타내며, expression은 형변환할 값이나 포인터입니다. new_type = dynamic_cast(expression); 예제를 통해 공부하자 현재 자식이 다시 부모로 캐스팅 하려고 한다. 이런 때를 업캐스팅이라고 한다. 업캐스팅을 해주는 것이 dynamic_cast이다. Base 클래스에는 가상 함수인 pr..
reinterpret_cast()는 static_cast()보다 안전성은 조금 떨어지며, C++에서 가장 강력하면서도 위험한 형변환 중 하나이다. C++ 타입 규칙에서 허용하지 않더라도 상황에 따라 캐스팅하는 것이 적합할 때 사용할 수 있다. 예를 들어 서로 관련이 없는 레퍼런스끼리 변환할 수도 있다. 주로 다른 포인터 타입 간의 형변환에 사용됨. reinterpret_cast의 기본 형태 new_type은 형변환하고자 하는 새로운 타입을 나타내며, expression은 형변환할 값이나 포인터. new_type = reinterpret_cast(expression); 포인터 간 형변환 예제를 통해 알아보자 #include int main() { int intValue = 42; // int 포인터를 do..
static_cast는 언어에서 지원하는 명시적 변환을 수행한다. → 작은 데이터 타입에서 큰 데이터 타입으로 바꾸기 예를 들어 다음 코드처럼 정수에 대한 나눗셈이 아닌 부동소수점에 대한 나눗셈으로 처리하도록 int를 double로 변환해야 할 때가 있다. 이때 static_cast()를 사용하면 된다. int i{ 3 }; int j{ 4 }; double result{ static_cast(i) / j }; → 더 큰 데이터 타입에서 더 작은 데이터 타입으로 변환 double pi = 3.141592653589793; int integerPi = static_cast(pi); // 더 큰 double을 더 작은 int로 형 변환 → 기본 데이터 타입 사이의 형 변환 int intValue = 42; ..
들어가기 전 try catch, throw과 exception,what을 공부하고 가자! try catch, throw https://wo-dbs.tistory.com/158 Try Catch, throw → 우리에게 익숙한 예외처리는 if문을 이용한 예외처리임. 하지만 if문을 보고 예외처리를 위한 코드인지 프로그램의 흐름을 구성하는 코드인지 쉽게 구분하지 못해서 가독성이 떨어짐. C++의 wo-dbs.tistory.com exception,what https://wo-dbs.tistory.com/159 exception, what → if-else문을 통해 예외를 인지하게 한 후 직접 throw를 던졌었지만 문제가 생기면 std::exception 클래스를 통해 시스템 상 내부에서 알아서 발생한 예외..
→ if-else문을 통해 예외를 인지하게 한 후 직접 throw를 던졌었지만 문제가 생기면 std::exception 클래스를 통해 시스템 상 내부에서 알아서 발생한 예외를 throw 한다. 예외(exception)은 프로그램 실행 중에 예기치 않은 상황이나 오류가 발생했을 때 발생하는 이벤트를 가리킵니다. 예외는 프로그램이 비정상적으로 종료되는 것을 방지하고 오류를 처리하는 메커니즘을 제공 → C++ 표준 클래스로 예외의 여러 종류들을 나타내는 여러 자식 클래스들을 두고 있다. • runtime_error 클래스, logic_error 클래스 등등 C++ 표준의 exception 클래스 를 상속받고 있다. #include #include #include int main() { try { std::st..