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++
→ STL(Standard Template Library)에서 제공하는 std::find 함수는 지정된 값을 검색하여 해당 값이 컨테이너에서 처음 발견되는 위치를 찾는 함수이다. std::find 함수는 순차적으로 컨테이너를 탐색하면서 지정된 값과 일치하는 첫 번째 원소를 찾는다. std::find 함수는 두 개의 반복자를 인수로 받는다. 첫 번째 인수는 검색을 시작할 범위의 시작 반복자이고, 두 번째 인수는 검색을 종료할 범위의 끝 반복자이다. 여기서 범위는 검색을 수행할 컨테이너의 일부분이다. 범위는 반열린 구간으로 해석되며, 시작 반복자는 포함되고 끝 반복자는 제외된다. std::find 함수의 세 번째 인수는 찾을 값을 나타낸다. 이 값과 일치하는 첫 번째 원소를 찾는다. std::find 함수는..
→vector 컨테이너에서 최대값, 최소값을 구할 경우 for문을 작성할 수도 있지만 이는 복잡하다. 그래서 algorithm 라이브러리에 있는 max_element를 사용한다면 한줄로도 간단하게 최대값을 구할 수 있다. 또한 max_element를 사용하면 최대값의 인덱스 값도 구해낼 수 있다. 최소값을 구하기 위해서는 min_element를 사용한다. #include #include #include using namespace std; int main() { vector v; v.push_back(46); v.push_back(68); v.push_back(184); v.push_back(4); v.push_back(17); v.push_back(53); cout
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; ..