C++ (31) 썸네일형 리스트형 [C++/백준 1918번] stack을 사용하여 중위 표기식을 후위 표기식으로 변환 (Postfix Expression) 중위 표기식 (Infix Expression) 중위 표기식은 연산자가 피연산자 사이에 오는 연산식을 의미한다. 예를 들어 (A+B)*C처럼 우리가 흔히 사용하는 표현법이다. 후위 표기식 (Postfix Expression) 후위 표기식은 연산자가 피연산자 뒤에 오는 연산식을 의미한다. 예를 들어 중위 표기식 A+B를 후위 표기식으로 나타내면 AB+로 표기할 수 있다. 이때 연산자가 여러 개 있을 경우 먼저 오는 연산자를 먼저 계산해 준다. 예를 들어 ABC*+라는 후위 표기식이 있으면 B*C를 먼저 하고 +A를 해주면 된다.즉, 중위 표기법으로 나타내면 A+B*C와 동일하다. 중위 표기식을 후위 표기식으로 변환 중위 표기식을 후위 표기식으로 변환할 때에는 stack 자료구조를 사용하여 .. [C++] 단일 타입의 Singly Linked List 구현 Linked List linked list는 데이터를 저장하는 구조 중 하나로 여러 개의 노드가 포인터로 연결된 선형 데이터 구조이다. 해당 자료구조는 구조체(혹은 클래스) 안에 저장할 데이터와 노드를 갖고 있다. Linked List vs Array linked list는 array와 비교했을 때 장단점이 존재한다. 먼저 장점으로는 특정 데이터를 제거하거나 저장하려고 하면 array는 항상 O(n)의 시간복잡도를 갖지만 linked list는 O(n-k)의 시간복잡도를 갖기 때문에 해당 작업에서 빠른 속도를 보인다. (최악의 경우에는 동일하다) 이때 특히 맨 앞의 데이터를 삽입하거나 제거하려고 할 때 linked list는 O(1)의 시간복잡도를 갖는다. 단점으로는 특정한 위치의 데이터에.. [C++] 상속 (Inheritance), protected 상속 (inheritance) C++은 상속을 명시할 때 별도의 키워드가 존재하지 않는다. 키워드 대신 상속 지정자를 사용하여 어떤 클래스를 상속받는지 명시해 주면 된다. 상속과 관련된 내용은 앞서 포스팅한적이 있기 때문에 이번에는 사용방법만 설명하겠다. 상속 관련 내용https://enchupin.tistory.com/127 class TestClass {public: int age; string name;};class Student : TestClass {private: int std_num;}; 위 코드에서처럼 : 다음에 소멸자는 자식클래스의 소멸자가 먼저 호출되고 그다음에 부모클래스의 소멸자가 호출된다. Java와 마찬가지로 다단계 상속도 가능하며 오버라이딩도 같은 원리로 가능하다. 오버라이딩 .. [C++] 템플릿 매개변수, 비타입 템플릿 매개변수 (NonType Template Parameter) 템플릿 매개변수 템플릿을 사용할 때 template 와 같이 사용한다고 했었다. 이때 typename T 와 같이 정의되지 않은 자료형을 사용하기 위한 변수를 타입 매개변수 라고 한다. 비타입 템플릿 매개변수 타입 매개변수 자리에 그냥 변수가 올 수도 있는데 이것을 비타입 템플릿 매개변수라고 한다. 사용하는 방법은 템플릿 매개변수와 동일하다. 따라서 아래 코드처럼 사용할 수 있다. #include template class TestClass {private: int arr[SIZE];};int main(){ TestClass test1; return 0;} 템플릿 매개변수 활용 비타입 템플릿 매개변수와 타입 매개변수를 함께 사용하는 것도 가능하다. 이를 활용하여 아래 코드처럼 어떤 .. [C++] 템플릿 (Template), 함수 템플릿, 클래스 템플릿, 템플릿 특수화 템플릿 (Template) 템플릿은 말 그대로 특정 기능을 구현하기 위한 코드의 틀을 만들어주는 것이다. 즉 일반화된 코드를 작성하여 함수나 클래스에서 다양한 데이터 타입에 대해 재사용할 수 있게 해 준다. 함수를 대상으로 하는 템플릿 함수 템플릿을 사용하여 함수의 구조는 미리 정의하지만 자료형은 정해지지 않은 상태로 두는 것이 가능하다. 예를 들어 아래 코드처럼 작성하였다고 하자. template T Add(T num1, T num2) { return num1 + num2;} 위와 같이 작성하면 자료형은 정의하지 않았지만 어떤 자료형이 오더라도 덧셈 연산을 처리할 수 있다. 위 코드에서 만든 템플릿 함수는 아래 코드처럼 사용이 가능하다. cout (5.5, 2) (1.2, 3.4) 템플릿.. [C++] std::array (array container) 배열을 선언하는 방법 C++에서 배열을 선언할 때 C 스타일 배열을 사용하는 방법과 C++ 표준 라이브러리의 std::array를 사용하는 방법이 있다. C 스타일로 배열을 선언하는 방법은 아래 코드와 같다. int arr[10];int[] arr = new arr[10]; C++ 표준 라이브러리를 사용하여 배열을 선언하는 방법은 아래 코드와 같다. #include std::array arr; 이때 std::array는 array 헤더파일에 정의되어 있기 때문에 #include 를 꼭 해줘야 한다. 초기화하는 방법은 C 스타일 배열과 동일하다. 다차원 배열 선언 std::array를 사용한 2차원 배열의 경우 아래 코드와 같이 선언이 가능하다. array, 10> arr = {0}; .. [C++] bool 자료형 bool 자료형 C++에서는 bool 자료형을 사용할 수 있다. bool 자료형은 보통 true, false를 저장하여 사용한다. #include using namespace std;int main() { bool isRaining = true; bool isSunny = false; if (isRaining) cout 만약 true, false 이외에 정수나 실수 값이 들어오면 0은 false로 0 이외의 값은 true로 변환된다. #include using namespace std;int main() { bool b1 = 0; // 0은 false로 변환 bool b2 = -42; // 0이 아닌 모든 값은 true로 변환 bool .. [C++] 단항 연산자 오버로딩 (전위, 후위 연산자 오버로딩) 단항 연산자 오버로딩 단항 연산자를 오버로딩할 때에는 피연산자가 2개 이상인 연산자의 오버로딩과 차이점이 존재한다. 단항 연산자의 경우는 아래 코드처럼 반환값을 자기 자신으로 해주어야 한다. class Pos {private: int x; int y;public: Pos(int x1 = 0, int y1 = 0) : x(x1), y(y1) { } Pos& operator++() { x+=1; y+=1; return *this; }}; 단항 연산자 오버로딩의 사용 단항 연산자를 오버로딩하여 사용하는 방법은 아래와 같다. Pos pos1(10, 15); Pos pos2(5, 7); pos1.operator++(); ++pos2; 이때 아래와 같은 코드의 사용도 가능하다. Pos pos1(1.. 이전 1 2 3 4 다음