std::transform
·
내배캠/C++
행렬의 덧셈을 구하는 문제를 풀다가 이전에 배열의 내적계산을 쉽게 할 수 있는 헤더에 포함 되어 있는std::inner_product 를 배웠던 기억이 있어서, 길이가 같은 배열의 덧셈을 쉽게 할 수 있는 라이브러리가 있나 하고 찾아봤는데, 직접적인 구현은 없었다. *내적 계산: https://dong-grae.tistory.com/45 std::inner_product(내적 계산)#include #include using namespace std;int solution(vector a, vector b) { int answer = 0; for(int i = 0; i 처음에는 반복문을 통해 직접 배열의 시작과 끝을 순회하며 a[i] * b[i] 의 값을 answer 변수에 더 해가며 저장했는데,dong..
템플릿 함수
·
내배캠/C++
매개변수의 타입이 다르거나 개수가 다르다면 함수의 이름이 같아도 C++에서는 함수 오버로딩으로 사용할 수 있다. 더보기#include using namespace std;int add(int x, int y){ return x + y;}double add(double x, double y){ return x + y;}string add(string x, string y){ return x + y;}int main() { cout   하지만 이렇게 되면 각 타입에 맞는, 많은 함수를 만들어야해서 시간적 비용이 발생한다.그래서 템플릿 함수를 만들어서 사용하면 일반화된 코드를 작성할 수 있게 된다.template T add(T x, T y){ return x + y;}int main..
스마트 포인터
·
내배캠/C++
Dangling Pointer 정의 : 이미 해제되었거나 소멸된 주소를 가리키는 포인터 발생 상황:동적으로 할당된 포인터가 해제 되었음에도 해당 포인터를 계속 사용하려고 할 때지역 변수가 Stack메모리에 저장되어있다가 해당 함수가 끝나고 소멸되었음에도 불구하고 해당 변수의 주소를 가리킬 때이중 해제(같은 메모리를 두 번 삭제할 때)와 같은 잘못된 메모리 작업      Smart Pointer Dangling pointer가 발생하지 않도록 C++에서 제공하는 Smart Pointer에 대해 알아보자. Smart pointer의 핵심 원리는 레퍼런스 카운트가 0이 되면 자동으로 메모리를 해제하는 것이다.그래서 사용자가 직접 delete를 하지 않아도 된다. unique_ptr과 shared_ptr은 헤..
Stack / Static / Heap
·
내배캠/C++
Stack일반 지역 변수들은 stack 메모리에 할당된다.지역 변수는 해당 함수가 종료되면, 변수 선언시 할당되었던 메모리가 회수되며 소멸된다. 따라서 사용자가 따로 메모리를 관리해줄 필요가 없다.*stack에 저장된 지역 변수더보기#include using namespace std;void Func1(){ int a = 10; a++; cout 스택은 함수 호출 시 사용되는 임시 메모리 공간으로, 지역 변수는 기본적으로 이 스택에 저장된다.함수가 종료되면 스택 프레임이 제거되면서 지역 변수도 함께 소멸된다. *static으로 변수 선언시더보기void Func1(){ static int a = 10; a++; cout static 키워드로 선언된 변수나 전역 변수는 스택이..
가상 함수와 추상 클래스
·
내배캠/C++
가상 함수와 추상 클래스에 대한 정리  1. 가상함수 (Virtual Function)선언: virtual void MakeSound( );자식 클래스에서 해당 함수의 세부 구현을 제공하면 자식 클래스의 함수가 호출된다.만약 자식클래스에서 구현하지 않았다면, 부모 클래스의 함수가 호출된다.가상 함수는 다형성을 구현하는 데 사용된다.다형성에서 부모클래스의 소멸자를 가상함수로 선언하지 않고 부모 클래스 포인터에서 자식 클래스의 소멸자를 호출하게 되면 부모 클래스의 소멸자만 호출되고 자식클래스의 소멸자는 호출되지 않아 메모리 누수가 발생할 수 있다.- C++에서는 소멸자가 가상이 아니면, 정적 바인딩(static binding)으로 동작한다.- 정적 바인딩은 컴파일 타임에 소멸자 호출이 결정되므로, 부모 클래..
Quick Sort 정렬 알고리즘
·
내배캠/C++
Quick Sort#include #include #include using namespace std;// 기준점 Pivot 보다 작으면 왼쪽으로, 크면 오른쪽으로 swap하는 분할 함수int Partition(string& str, int Left, int Right){ char Pivot = str[Right]; // 마지막 요소를 기준 pivot으로 설정 int i = Left - 1; // 작은 요소의 인덱스 for (int j = Left; j  퀵솔트는 평균적으로 O(n log n)의 속도를 가진 정렬 알고리즘이며, 최악의 경우엔 O(n2)이다.오름차순으로 정렬한다고 가정했을 때, Pivot을 하나 정해서 왼쪽에는 Pivot보다 작은 값들을, 오른쪽엔 Pivot보다 큰 값들을 ..