언어/Basic C++

[Basic C++] #64_stack C++에서 제공하는 stack 클래스에 대해 알아보겠습니다. Overview 개념 선언 멤버 함수 예제 #0. 개념 1. Stack C++에서 제공하는 stack은 LIFO 데이터 구조를 구현하는 STL 컨테이너입니다. stack은 기본적으로 컨테이너의 가장 뒤쪽에서만 데이터를 삽입하고 삭제합니다. #1. 선언 1. 헤더 #include 2. 선언 및 초기화 #include #include using namespace std; int main() { // #0. 빈 스택 선언 stack s1; // #1. 기존 배열을 활용한 초기화 int arr[] = { 1, 2, 3, 4, 5 }; int n = sizeof(arr) / sizeof(arr[0]); stack ..
[Basic C++] #63_string C++에서 제공하는 string 클래스에 대해 알아보겠습니다. Overview 정의 선언 멤버 함수 그 외 특징 예제 #0. 정의 1. string 클래스 C++에서 제공하는 string 클래스는 문자열을 다루기 위한 클래스입니다. string 클래스는 문자열을 저장하고 다양한 조작 함수를 제공합니다. string 클래스를 활용하면 복잡한 작업들을 직접 구현할 필요가 없고, 효율적으로 문자열을 다룰 수 있습니다. C언어의 char* 혹은 char[]과 달리, 문자열 끝에 '\0'이 들어있지 않습니다. #1. 선언 1. 헤더 #include 2. 선언 혹은 초기화 #include using namespace std; int main() { string str("He..
[Basic C++] #62_erase(), 주의할 점 STL 순차 컨테이에서 활용하는 erase() 함수에 대해 알아보겠습니다. Overview 개념 코드 예제 #0. 개념 1. std::erase() iterator erase (const_iterator position); iterator erase (const_iterator first, const_iterator last); Details erase() 함수는 STL의 순차 컨테이너에 저장된 요소를 제거하는 데 사용됩니다. #1. 코드 예제 1. 예제-1 #include #include using namespace std; int main() { vectorv = { 0, 1, 2, 3, 4, 5, 6 }; v.erase(v.begin(), v...
[Basic C++] #29_Set, STL 컨테이너 C++ 개발에서 STL 컨테이너에 대해 알아보겠습니다. C++가 제공하는 STL 컨테이너 중 Set과 MultiSet을 살펴보겠습니다. #0. 개념 1. 개념 Set은 STL에서 제공하는 연관 컨테이너입니다. 여느 연관 컨테이너가 그러하듯 노드 기반 컨테이너이며, 균현 이진트리로 구현되어 있습니다. Set은 "Key" 값을 원소로 이루어진 집합입니다. "Key" 값은 중복이 허용되지 않으며, 자동으로 정렬됩니다. 기본 정렬 방식은 오름차순(a Root -> Right)를 통해 정렬된 Key 값들을 순차적으로 탐색합니다. map 컨테이너와 달리, Set에서 "Key"값은 Key 값임과 동시에 ..
[Basic C++] #22_참조형 변수 C++ 개발에서 까다로운 문법 혹은 특별한 의미를 갖는 부분에 대해 알아보겠습니다. "전문가를 위한 C"의 10 항목, "C++의 까다롭고 유별난 부분들"에 해당하는 내용입니다. 참조형 변수 "참조형 변수"란 다른 변수에 대한 별명입니다. 참조형 변수, 즉 어떠한 변수에 대한 참조형 변수의 수정 사항은 모두 기존 변수에 반영됩니다. 참조형 변수를 어떠한 변수의 주솟값 추출, 혹은 역참조 연산이 자동으로 수행되는 포인터 변수라고 생각하면 됩니다. * 주의 : &는 주소 값을 의미하기도 합니다. 따라서, "자료형 뒤에 오는 &", 즉 참조인지 잘 확인해야 합니다! 1. 예제 코드 // 참조형 변수의 사용 int x = 5; int& xRef1 = x; // 컴파일 에..
[Basic C++] #28_static 키워드 C++ 개발에서 까다로운 문법 혹은 특별한 의미를 갖는 부분에 대해 알아보겠습니다. "전문가를 위한 C"의 10 항목, "C++의 까다롭고 유별난 부분들"에 해당하는 내용입니다. Overview 개념 클래스와 static 링킹 namespace #0. 개념 1. static 키워드? staic 키워드의 의미는 문맥에 따라서 달라집니다. 일반적으로, static 키워드는 변수 혹은 함수를 내부 링킹을 통해 정의하기 위해 사용됩니다. 더불어, static으로 정의한 변수 혹은 함수는 메모리 구조의 Data 영역에 저장되어 프로그램의 시작과 함께 메모리가 할당되며, 프로그램의 종료 시점에 해제됩니다. static 키워드는 어떤 함수 내 static 변수, 어떤 ..
[Basic C++] #61_객체 풀, Obejct Pooling C++의 "디자인 효율성"에 대해 알아보겠습니다. "전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다. 객체 풀링 1. 개념 객체가 필요할 때마다 직접 생성하는 것이 아니라, 시작 시점에 한 번만 생성됩니다. 필요할 때마다 객체 풀에 요청하며, 수명이 끝난 객체는 객체 풀에 되돌려 놓습니다. 즉, 객체의 생성자를 매번 필요할 때마다 호출하지 않고, 시작 시점에 미리 준비해 놓습니다. 2. 언제? 프로그램이 구동되는 동안 빈번하게 발생하는 "생성자"와 "소멸자" 호출을 피하기 위한 메커니즘. 개수가 많고, 비교적 수명이 짧은 타입의 객체들의 사용은 "객체 풀" 사용을 고려해야 합니다! 예제 1. 목표 객체들을 ..
1. 개념 1. 스마트 포인터자원 관리는 C++에서 가장 골치 아픈 문제입니다. 객체를 동적 할당받은 경우 "delete" 호출 없이 자원 해제가 되지 않기 때문에 "delete" 호출을 잊어버리는 경우 심각한 문제(eg 메모리 릭)가 발생할 수 있습니다. 더불어, 단순한 포인터의 동적 할당 수행은 Aliasing 문제도 동반합니다. 어떤 경우에는 하나의 포인터를 여러 코드 위치에서 복제하여 참조할 수 있습니다. 이때, 마지막으로 사용된 곳에서 "delete" 호출을 통해 자원 해제를 진행해야 하지만, 파악하기 굉장히 어렵죠.이때, 스마트 포인터가 큰 도움을 줄 수 있습니다. 스마트 포인터는 "스택(정적 할당 받은 메모리들의 영역)"의 안정성과 유연성을 포함합니다. 스마트 포인터를 통해 동적 할당받은 메..
[Basic C++] #59_가비지 컬렉션 C++의 "가비지 컬렉션"에 대해 알아보겠습니다. "전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다. 개념 가비지 컬렉션이란 메모리 관리를 극단적으로 자동화한 것입니다. 동적으로 할당받은 메모리 공간을 자동으로 해제해주는 "가비지 컬렉션"은 지원되는 환경 한에서 객체와 연관된 메모리를 명시적으로 해제할 필요가 없습니다. 마크 앤 스윕 알고리즘 마크 앤 스윕 알고리즘은 가비지 컬렉션의 접근 방법 중 하나로 주기적으로 모든 포인터에 대해 해당 메모리를 참조하여 사용하는 부분이 있는지 검사하여 표시(마크)합니다. 각 검사 주기가 끝날 때마다 표시되지 않은 메모리를 "미사용"으로 취급하여 해제합니다. 마크 앤 스윕 알고리즘 사용을 위해 ..
[Basic C++] #58_포인터, 배열과 포인터, 포인터 연산 C++의 "포인터"에 대해 알아보겠습니다. "전문가를 위한 C"의 22 항목, "효과적인 메모리 관리"에 해당하는 내용입니다. 포인터 개념 1. 포인터? 포인터는 단순히 메모리 위치를 계산하는 주 솟값입니다. 2. "*"를 활용한 역 참조 "*" 연산자를 활용하면 포인터를 역 참조할 수 있습니다. 여기서 역 참조란 단순히 포인터가 가리키는 메모리 주소에 들어있는 값을 가져올 수 있습니다. 3. "&"를 활용한 참조 "&" 연산자를 활용하면 어떤 값이 저장되어 있는 메모리의 주솟값을 가져옵니다. 보통 포인터 변수에 "&a" 값을 넣어줌으로써 "a"라는 변수의 메모리 주소 값을 넘겨줍니다. 배열과 포인터 1. 배열 == 포인터, but ALL..
Hardii2
'언어/Basic C++' 카테고리의 글 목록 (2 Page)