목록분류 전체보기 (225)
그냥 게임개발자
fill() 모든 값으로 초기화 할 수 있는 함수다. 0, 1, 100 등 모든 숫자로 초기화가 가능하다. memset() -1, 0으로만 초기화 가능 memset()을 쓰다보면 0, -1 이외의 값으로 초기화하다 틀리는 경우가 있다. 이 때 fill()을 추천한다. 여기서 보면 memset()은 0과 -1로만 초기화 가능하다보니 fill보다 시간적으로 더 빠르고 최적화 할 수 있다. fill() O(n)의 시간 복잡도를 가진다 fill(시작값 - first, 끝값, -last, 초기화하는 값 - val) 이런식으로 값을 초기화한다. 모든 값을 기반으로 초기화가 가능하며 [first, last]까지 val로 초기화한다. fill()로 배열의 모든 값이 아닌 일부값을 초기화하는 경우도 있지만 보통은 전체를..
일반화(Generalization)는 여러 사례들의 공통되는 속성들을 일반적인 개념으로 추상화한 형태를 말한다. 이터레이터는 컨테이너의 구조나 컨테이너 안에 들어가 있는 요소의 타입과는 상관없이 컨테이너에 저장된 데이터를 순회하는 과정을 담당하는 아이이다. 그니까 그거다 내가보기엔 이거다. ㅇㅇ 그냥 저 이터레이터는 반복해 밖에 못하는 아이다. 한마디로 각각의 다른 요소들을 쉽게 탐색할 수 있게 한 일반화 장치이다.
이터레이터는 어떠한 컨테이너(배열, 맵, 벡터 등)의 범위 안에서 일부 요소를 가리킨다. 또한 해당 요소들을 순회할 수 있는 개체이다. 이터레이터는 컨테이너의 개체를 참조하는 것이기 때문에 이 자체를 제거할 수는 없다. 반면 다르게 포인터는 변수의 메모리 주소를 저장하는 개체의 개념이며 포인터는 delete를 통해 포인터를 제거할 수 있다.
이터레이터는 컨테이너에 저장되어 있는 요소의 주소를 가리키는 개체를 말한다. 그냥 그거다 주소를 가리킨다라고생각하자. 그게 편해나는 그리고 컨테이너는 담을 수 있는 공간이라고 생각하는게 편해요 그게 편해 나는 그래서 담을 수 있는 공간을 생각해보자. vector, map 이런게 있다. 각각 다르게 구현된컨테이너들을 일반화된 이터레이터를 통해 쉽게 순회할 수 있다. 여러가지 방법이 있다. 배열을 보자. ㅇㅇㅇ 그렇다면 리스트는? ㅇㅇ 그러면 스택은? ㅇㅇㅇㅇ 여기서 이런 각각의 컨테이너의 한 주소를 가리키는 개체가 바로 이터레이터이다. 오우씨 나 그림 잘그리네 아무튼 이터레이터는 주소를 가리키는 개체인데 다만 주소값을 바로 반환하지는 못해서 &*를 통해 한단계 더 거쳐서 가리키는 해당 요소의 주소값을 반환..
짜잔 메모리구조입니다. 귀엽죠 뭔가 알록달록 무지개 같음 위에서부터 스택(stack), 힙(heap), 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)으로 나눠진다. 스택 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정된다. 그러나 함수가 함수를 호출하는(재귀함수) 등 따라 런타임시에도 크기가 변경된다 힙 힙은 동적 할당할 때 사용되며 런타임 시에 크기가 결정이 된다. 데이터 영역 BSS 영역과 Data 영역으로 나뉘고 정적할당에 관한 부분을 담당한다. [정적인 특징] 코드 영역 : 소스코드 들어감 [정적인 특징] 정적할당 정적할당은 컴파일단계에서 메모리를 할당하는 것을 말한다. BSS segment와 Data segment, code / ..
소문자로 된 문자를 숫자로 바꾸는 로직이 필요하면 어떻게 해야할까? ASCII코드를 사용하면 된다. A = 65 Z = 90 a = 97 z = 122 이렇게 가지고 있다. a부터 시작해 z부터 입력을 받으면 이를 정수 0~25까지 표현하고싶다. 그렇다면 아래와 같다. #include using namespace std; int main() { char a = 'a'; cout
배열 중에서 아래와 같은 배열이 있다. [1, 1, 2, 2, 3, 3] 그럼 이 중에서 중복된 것들을 삭제하는 것은 어떻게 할까? 첫번째 방법은 map이다. 간단하게 map을 사용해서 할 수 있다. map에 1이라는 key를 넣고 value를 할당한다. 그러면 다음 1은 continue 할수가 있고 이런 식으로 하나의 map에 중복된 것들을 삭제하고 오름차순으로 나열 할 수 있다. 그럼 코드로 한 번 확인해보자. #include #include #include using namespace std; map mp; int main() { vector v{1, 1, 2, 2, 3, 3}; for (int i : v) { if (mp[i]) continue; else mp[i] = 1; } vector ret..
배열의 이름 = 주소값이라는 소리를 어디선가 들어볼 수 있을 것이다. 이것을 Array to Pointer decay라고 한다. int a[N]라는 N개의 크기를 가진 변수가 있다. int *c = a; 이렇게 담을 수 있다? int[]와 int는 서로 다른 타입이다... 근데 담을 수 있다. ??? ㅇㅇ 담을 수 있어요 그래서 Array to Pointer decay라는 것이다. 포인터는 배열의 이름을 담을 수 있다...! 어떠한 Type[N]이 Type*로 담을 수 있다는 것이다. 이렇게 담을 때 int* c = a;일 때! a의 크기는 decay! 크기가 부식이 된다는 것이다! 그리고 a는 배열의 첫번째 주소가 바인딩이 된다. 이게 Array to Pointer decay라는 현상이다. 포인터의 배..