[C/C++] Declaration VS Definition
·
Language/C C++
Declaration은 변수의 이름, 타입, 초기값(있다면)에 대한 정보를 컴파일러에게 알려주는 것이다. 즉 선언이란 한 변수의 속성에 대해 자세한 내용을 제공하는 것이다.Definetion이란 변수가 어디에 저장되어있는지, 즉 변수가 메모리 어디에 할당되는지를 말한다.C에서 변수에 대한 선언과 정의는 동시에 일어난다.int a;a라는 변수에 이름(a)과 타입(int)같은 정보가 컴파일러로 보내져 심볼테이블이라는 자료구조에 저장될 것이다. 이를 통해 메모리에는 4byte가 할당될 것이다.변수의 선언은 일어나지만 정의는 일어나지 않는 경우를 보자. 바로 extern 키워드를 사용할 때 이다.xxxxxxxxxxextern int a;extern 키워드는 다른 파일에서 미리 정의된 변수 이름을 가져올 때 사용..
[C++] std::map
·
Language/C C++
흔히 사용하는 key-value 자료형이다. C++에서는 #include으로 사용할 수 있다.std::map m;주요 함수삽입xxxxxxxxxxm.insert(make_pair("a", 100));m.insert(make_pair("c", 400));m.insert(make_pair("d", 200));m.insert(make_pair("b", 300));삭제xxxxxxxxxxm.erase("a"); // key 또는 iterator검색​xm["b"] //value​// find는 iterator를 반환한다.m.find("b")->first; //keym.find("b")->second; //value이 때 key에 해당하는 값이 없다면[]연산자는 0을 반환한다.find는 end() iterator를 반..
[C++] std::endl
·
Language/C C++
알고리즘 문제를 푸는데 시간초과가 계속 발생했다. 정답 코드를 검색해서 비교해봤을때 내 코드와 다른 부분은 출력부분 뿐이었다. 나는 개행을 std::end를 사용했다.​xfor (int i = 0; i
[C++] Reference(1/2)
·
Language/C C++
C/C++에서는 데이터를 관리하기 위해 기본적으로 두 가지 종류의 저장소를 제공한다. 변수 포인터 : 포인터는 다른 저장소를 가리키는 메모리 주소를 저장한다. 주로 크기가 일정하지 않은 문자열이나 배열 등에 사용한다. C++은 여기에 참조(Reference)라고 하는 특수한 종류의 변수가 존재한다. 참조는 일반 변수의 저장소를 공유하기 위해 만든 실제 변수가 아닌 컴파일러가 인지하는 가상 변수를 말한다. C++의 포인터는 메모리 주소에 직접 접근해서 데이터를 읽고 수정할 수 있다. 이를 통해 비교적 크기가 큰 데이터를 빠리게 처리할 수 있다. 일반 객체지향 언어는 포인터를 제공하지 않는다. 대신 가상 포인터와 가상테이블을 사용하여 필요에 따라 서로 다른 데이터 저장소를 가리킨다. int, float같은 ..
[C++] 클래스 생성자
·
Language/C C++
클래스의 인스턴스를 생성할 때 반드시 생성자가 호출된다. 생성자를 통해 클래스가 어떻게 생성되는지 살펴보자.암시적 생성자와 명시적 생성자객체를 생성하는 방법은 클래스 내 멤버을 어떤 방식으로 초기화하느냐에 따라 호출되는 생성자가 달라지게 된다. 아래 예시 코드를 통해 알아보려 한다.아래와 같은 Point 클래스를 정의해보았다.x#include class Point{public: int x; int y;​ Point() : x(0), y(0) { printf("Point() called!\n"); }​ Point(int x) : x(x), y(0) { printf("Point(int x(%d)) called!\n", x); }​ Point(int x, int y) : x(x), y(y) { printf("..
[C/C++]std::mutex
·
Language/C C++
[C/C++]std::mutex멀티 쓰레드를 이용한 프로그램을 작성할 때 공유 자원의 관리에 주의해야한다. 여러 쓰레드가 동시에 같은 데이터를 변경할 경우 의도하지 않은 결과를 초래할 수 있다. 이런 멀티 쓰레드 환경에서 발생하는 문제점을 동기화 메커니즘으로 해결할 수 있다.먼저 동기화를 사용하지 않을 경우 발생하는 문제를 살펴보자.#include //std::thread #include //printf() using namespace std; int sum = 0; void Add(int cnt) { for (int i = 0; i < cnt; i++) { sum += 1; } } void Sub(int cnt) { for (int i = 0; i < cnt; i++) { sum -= 1; } } in..
[C/C++] const keyword
·
Language/C C++
[C/C++] const keywordconst 키워드를 적절히 사용할 수 있으면 유용하다. 코드 작성 중 발생할 수 있는 실수를 컴파일 단계에서 확인가능하기 때문에 활용하면 좋다. const의 개념은 간단하다. 이 키워드를 통해 선언되면 프로그램 실행 중 변경할 수 없음을 지정한다. 이를 통해 할 수 있는 기능 중 하나는 상수 지정이다. 상수를 지정하는 다른 방법은 #define을 이용하는 것이다. const는 #define보다 이점을 가지고 있다. 먼저 #define을 사용할 경우는 단순 대체만 수행하기 때문에 타입 확인을 할 수 없는 반면 const를 사용하면 컴파일러에서 확인이나 검사가 가능하다. 또한 const변수를 이용하면 디버거에서 변수를 이용할 수 있어 디버깅에 유용하다.포인터와 const..