[C, C++] 전역변수와 정적변수가 0으로 초기화되는 이유

전역변수(global), 정적변수(static), 지역변수(local) 초기화를 하지 않은 전역변수, 정적변수, 지역변수를 선언하고 출력해보았다. 위 코드를 실행하면 아래와 같은 출력을 얻는다. 따로 초기화를 하지 않았지만 전역변수(global)와 정적변수(static)는 자동으로 0으로 초기화되었고 지역변수(local)는 초기화를 하지 않아서 쓰레기 값이 들어갔다. 이는 변수의 저장 위치가 다르기 때문에 발생하는 결과다. Data, BSS, Stack 지역변수는 메모리의 Stack Segment에 저장되며 선언된 함수가 종료되면 메모리에서 사라진다. … Read more

[C++, STL] 벡터와 배열의 최대값, 최소값 출력

다른 글 [C++, STL] 알고리즘 문제풀이를 위한 벡터(vector) 벡터와 배열의 최대값, 최소값 max_element(), min_element()는 자료구조에서 [forward, last) 범위 내 최대값, 최소값을 리턴한다. 이를 활용해서 벡터, 배열의 최대값과 최소값을 출력할 수 있다. 구현 헤더파일 max_element()와 min_element()는 algorithm 헤더파일을 필요로한다. 벡터의 최대값, 최소값 출력 벡터의 begin(), end()를 forward iterator, last iterator로 입력한다면 벡터의 최대값, 최소값을 출력할 수 … Read more

[C++, STL] 우선순위 큐(priority queue) 비교연산자 구현

사용자 정의 우선순위 큐 [C++, STL] 알고리즘 문제풀이를 위한 우선순위 큐(priority queue) 우선순위 큐는 비교연산자를 통해 자료의 우선순위를 정할 수 있다. 그리고 STL에는 자료를 오름차순, 내림차순으로 정렬해주는 greater, less가 미리 구현되어 있어서 편리하게 이용할 수 있다. 그러나 greater, less가 만족스럽지 않다면 사용자가 직접 비교연산자를 구현할 수 있다. 우선순위 큐 선언 우선순위 큐를 사용하기 위해서 queue … Read more

[C, C++] INT, SHORT 등 정수의 최대값, 최소값 출력(limits.h)

최대값, 최소값 확인의 필요성 우리 가족이 대대손손 월급을 받을때마다 급여를 int형 변수인 account에 넣어준다고 하자. 그럼 이 account는 언젠가 2147483647(=INT의 최대값)을 초과할 것이고, 오버플로우가 발생한다. 이를 막으려면 오버플로우가 발생시 account2를 만드는 등의 다른 방법을 취해야한다. 그러기 위해서는 일단 오버플로우의 조건인 INT의 최대값을 알아야한다. 최대값, 최소값 확인 limits.h 파일에는 char, int, short등의 최대값과 최소값이 정의되어있다. printf를 … Read more

[C++] typeid로 정수, 클래스, STL 등 변수의 자료형 확인

목적 C++에서 typeid를 이용하여 정수 등 변수의 자료형을 출력한다. typeid C++에는 typeinfo 헤더파일에 typeid가 있다. typeid와 연산자로 두 개체의 자료형이 같은지 확인할 수 있고 멤버함수 name()을 통해 단일 개체의 자료형을 확인할 수 있다. typeid를 이용하여 두 개체의 자료형 일치 확인 구현 typeid가 포함된 typeinfo, 출력을 위한 iostream를 포함시킨다. 자료형 일치를 확인하고 싶은 개체들을 선언한다. typeid와 … Read more

[C++, STL] 2차원 벡터(vector)의 range-based for loop 사용

다른 글 [C++, STL] 2차원 벡터 만들기 목적 2차원 벡터의 모든 원소를 Range-based for loop를 이용하여 출력 Range-based for loop는 C++11부터 지원한다. 구현 테스트를 위한 벡터 생성 위와 같이 코드를 작성하면 아래와 같은 5X5 벡터를 만들 수 있다. 0 1 2 3 4 10 11 12 13 14 20 21 22 23 24 30 31 … Read more

[C++, STL] set 원소 iterator 없이 출력(range-based for loop)

*Range-Based for Loop 가 필요해서 C++11 이상에서 동작합니다. iterator 선언 set원소 출력 방법 iterator 미선언 set원소 출력 방법 범위기반 for문에선 iterator를 선언하지 않아도 참조가 가능한데, 이유는 모르겠습니다. 공부가 더 필요합니다.컴파일러는 msvc, gcc에서 동작하는것을 확인했습니다. 그리고 iterator, range based for loop, 벡터의 수행시간을 각각 확인해봤는데 약 백만개를 참조했을때 아래의 결과가 나왔습니다. range based for loop의 벡터 … Read more

[C++, STL] 구조체, pair 벡터 정렬

다른 글 [C++, STL] 알고리즘 문제풀이를 위한 벡터(vector) [C++, STL] 알고리즘 문제풀이를 위한 pair 서론 벡터에 들어갈 수 있는 자료형에 pair와 struct(구조체)가 있다. 이들을 이용하여 하나의 원소에 다수의 자료가 들어갈 수 있다. pair와 struct를 자료형으로 가지는 벡터에서 사용자 지정 함수를 이용하면 특정 자료를 기준으로 정렬할 수 있다. pair 벡터 정렬 정수를 자료형으로 갖는 pair의 first를 … Read more