C++

    [C/C++] 메모리 오류에 대하여

    1. C/C++에서 메모리 오류의 종류 일단 메모리 공간에 따라 크게 Heap Memory 에러와 Stack (local variables) Memory 에러가 있다. Heap 메모리 영역에서 발생가능한 에러는 이미 해제된 메모리 다시 해제 할때 할당된적도 없는 메모리 해제 할라고 할때 이미 해제된 메모리 영역에 뭔가 데이터를 쓰려고 할때 할당된 적이 없는 메모리에 뭔가 데이터를 쓰려고 할때 메모리 할당 에러 동적으로 할당된 메모리 배열에서 초과된 index의 위치를 읽거나 쓰려고 할때 1,2 번과 3,4번을 묶어서 볼 수 있는데 해제시에 발생하는 문제 vs 데이터 입력시 발생하는 문제로 볼 수 있다. 스택 메모리 영역에서 발생가능한 에러들로는 정적 배열에서 초과된 index의 위치를 읽거나 쓰려고 할때..

    [C++] cout 소수점 n자리까지 표시하기

    일반적으로 아무 설정 없이 소수점을 표시하면 #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); double x = 3.333333333; cout

    [골5] 2166 - 다각형의 면적

    #include #include #include #define FAST_IO() \ {\ ios::sync_with_stdio(false);\ cin.tie(NULL); \ cout.tie(NULL); \ }\ #define x first #define y second using namespace std; using dp = pair; double Calculate(double x1, double x2, double x3, double y1, double y2, double y3) { double res = x1 * y2 + x2 * y3 + x3 * y1; res -= x2 * y1 + x3 * y2 + x1 * y3; return res / 2; } int main() { FAST_IO(); int ..

    [골5] 24891 - 단어 마방진

    #include #include #include #include #define FAST_IO() \ {\ ios::sync_with_stdio(false);\ cin.tie(NULL); \ cout.tie(NULL); \ }\ using namespace std; vector ans(20), s(20); vector vis(20); int l, n; void DFS(int cnt = 0) { if (cnt == l) { bool flag = true; for (int i = 0; i < l; i++) { for (int j = i + 1; j < l; j++) { if (flag) flag = (ans[i][j] == ans[j][i]); } } if (flag) { for (int i = 0; i < ..

    [C++] 함수를 객체로 사용하기 (std::function, std::mem_fn, std::bind)

    Callable Callable 이란, 이름 그대로 호출(Call)할 수 있는 모든 것을 의미한다. 대표적인 예시로 함수가 있다. 하지만 C++에서는 ( ) 를 붙여 호출할 수 있는 모든 것은 Callable 이라고 정의한다. same_obj 는 클래스의 객체이지만, 함수처럼 ( ) 를 호출할 수 있다. 마찬가지로, a 는 람다 함수이지만, ( ) 를 통해 호출할 수 있기에 Callable 이라고 할 수 있다. #include struct S { void operator()(int a, int b) { std::cout

    [C++] 매크로 개념과 주의사항

    매크로 -> 단순 치환 -> #define으로 정의한다. # : 전처리 지시자 -> 컴파일 이전에 수행 define : 정의하다. -> 컴파일 이전에 정의하라고 명령. #1 매크로 상수 #define 매크로이름 치환할 값 매크로 상수 사용 시 주의사항 -> 단순 치환이기 때문에 세미콜론을 작성할 경우 세미콜론까지 치환해버린다. 예) #define PI 3.14f; // 입력 cout 속도가 빠르다. -> 함수 호출을 위한 연산들이 필요 없어진다. 매크로 함수의 주의점 #1 연산을 수행할 때 연산자 우선순위를 명확하게 표시해야한다. 예) #define SQUARE(n) n * n cout

    [C++] emplace_back 과 push_back 의 차이

    item 타입의 생성자가 타입을 인자로 받는다면? push_back 함수는 '객체' 를 집어 넣는 형식으로, 객체가 없이 삽입을 하려면 "임시객체 (rvalue) " 가 있어야 하거나 암시적 형변환이 가능하다면, 인자로도 삽입할 수 있다. ( 이는 인자를 통해 임시객체를 암시적으로 생성한 후 삽입한다 ) vector vt; item a = {}; // 기본 생성자 호출 vt.push_back(item("abc", 1, 234)); vt.push_back(std::move(a)); vector v; v.push_back(1); // 등등.. 1. push_back을 통해 객체를 삽입하기 위해, item 임시 객체를 하나 만든다. 2. 임시 객체를 복사 생성자를 통해 push_back 함수 내에서 임시 객체..

    [C++] 배열 초기화, 벡터 초기화, fill 함수

    C++에서 배열을 선언하고 초기화를 해주지 않으면 배열은 쓰레기 값으로 채워져있다. 아래의 코드를 실행해보면 #include using namespace std; int main() { int arr[5]; for (int i = 0; i < 5; i++) { cout

    [C++] 쓰레기값 거르기(아주 작은값) numeric_limits

    numeric_limits 클래스 template class numeric_limits epsilon 함수는 1과 데이터 형식에 대해 나타낼 수 있는 1보다 큰 가장 작은 값 사이의 차이를 반환 // numeric_limits_epsilon.cpp // compile with: /EHsc #include #include using namespace std; int main( ) { cout

    [실5] 4659 - 비밀번호 발음하기

    #include #include #include using namespace std; bool IsVocal(char c) { return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; } int maxCnt = 3; int main() { vector res; string s = ""; while (true) { string tmp = ""; bool hasVocal = false, flag = false, fail = false;; cin >> s; if(s == "end") break; for (int i = 0; i < s.size() + 1; i++) { char cur = i < s.size() ? s[i] : ' '; // 1. 모음(..