일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 티스토리챌린지
- 1563
- const
- 2294
- softeer
- directx
- algorithm
- 프로그래머스
- 백준
- 언리얼엔진5
- DirectX11
- Unreal Engine5
- UE5
- baekjoon
- Programmers
- UnrealEngine4
- 팰린드롬 만들기
- C++
- NRVO
- winapi
- RVO
- IFileDialog
- GeeksForGeeks
- 오블완
- Frustum
- DeferredRendering
- C
- UnrealEngine5
- RootMotion
- 줄 세우기
- Today
- Total
목록C++ (26)
Game Develop
STL 컨테이너들은 내부적으로 Iterator가 있다. 컨테이너에 있는 원소들을 탐색하기 위한 포인터같은 객체로써, 각각의 컨테이너들은 탐색하는 방식(알고리즘)이 다르기 때문에 Iterator도 여러 종류가 있다. 입력 반복자 (input iterator) : 읽기만 가능, 순방향 이동, 현 위치의 원소를 한 번만 읽을 수 있는 반복자 출력 반복자 (output iterator) : 쓰기만 가능, 순방향 이동, 현 위치의 원소를 한 번만 쓸 수 있는 반복자 순방향 반복자 (forward iterator) : 읽기/쓰기 모두 가능, 순방향 이동(++)이 가능한 재할당될 수 있는 반복자 양방향 반복자 (bidirectional iterator) : 읽기/쓰기 모두 가능, 순/역 방향 이동(--)이 가능한 반..
vector의 멤버함수 capacity는, 현재 메모리의 재할당없이 몇개의 원소를 집어 넣을 수 있느냐를 알려주고, size()는 실제로 원소가 몇개 들어가있는지를 알려준다. capacity이상으로 원소를 집어넣으려 할 경우 내부적으로 메모리의 재할당이 이루어진다. 재할당 크기는 약 1.5배이다. capacity가 늘어난 이후에는 원소를 삭제하더라도 capacity가 줄어들지는 않는다. vector의 원소를 얻으려할 때 []연산자와 at연산자를 사용하는 방법이 있다. []연산자는 범위검사를 하지않고, at연산자는 범위검사를 한다. 이런게 으레 그렇듯, 범위검사를 하는 at보다는 그냥 []이 조금 더 빠르긴 하다.
그냥 map[i] = 1; 이런식으로 []연산자만 이용했었다. 그런데 insert를 사용하면 성능이 약간 더 좋고, 이미 해당 key값이 들어가 있는지 아닌지 판별할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); map visit; visit.insert({ 'a',500 }); visit.insert({ 'b',300 }); pair returnedValue = visit.insert({ 'a',200 }); if (!returnedValue.second) // a라는 키값이 이미 있기에 false를 리턴. { cout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 string addString(string s) { string result; for (int i = 0; i = 0x20) // 출력가능한 문자열이면 { result = result + s[i]; // 1번 //result += s[i]; // 2번 } } return result; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); string input; string h = "12345678123242324141424214124215..
배열은 선언과 동시에 정의를 해줘야한다. 그래서 보통 아래처럼 정의한다. int arr[30]; int arr[]; // Error. 그리고 선언된 배열은 포인터변수와 다르게 상수이다. 해당 변수에 다른 값을 대입하지 못한다. 값을 대입하려 할 경우 l-value가 아니라며 컴파일에러가 뜬다. 이런점만 빼면 거의 대부분이 유사하긴 하다. 이외에 차이점을 좀 더 나열하자면 아래와 같다. 1. sizeOf를 사용할 때. sizeof(포인터변수) -> 포인터변수의 크기가 리턴된다. 포인터변수의 크기는 32bit컴파일러인지, 64bit컴파일러인지에 따라 다르다. sizeof(배열) -> 배열전체의 총 크기를 변환한다. int arr[3]인 경우, sizeof(int) * 3이 될 것이다. 2. 문자열 문자열을 ..
보통 int형 배열을 선언하고 0으로 초기화하려하면 아래와 같이 코드를 작성한다. 1. int arr[200] = {0}; 2. memset(arr,0,200); 두 방법의 차이는 뭘까? 정답은 거의 동일하다이다. Visual Studio 2017 기준으로, 컴파일러는 두 방법 다 내부적으로 _memset을 호출해서 해당 작업을 수행한다. 0으로 말고, 다른값으로 초기화하고 싶으면 아래와 같은 함수를 사용하자. fill_n (arr,200,-1000); // arr을 -1000으로 초기화. 2차원배열을 초기화하고 싶다면 아래와 같이 사용하면 된다. int arr[200][200]; fill(&arr[0][0], &arr[199][200], -1000) // 2차원배열 arr을 -1000으로 초기화. 보다..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 class A { private: int sum; public: void Test(); }; void A::Test() { A a; a.sum = 20; cout
++count와 count++의 차이는 뭘까? 결과론적으론 ++count는 객체를 반환, count++은 값을 반환한다는 것이다. 아래의 코드를 보자. int x = 5; int y = ++x; 사람이 의도한대로(아마도) x의 값은 1을 증가시키고 그 값이 y에 정상적으로 들어간다. 메모리에 있는 x값을 직접 증가시키고 x객체를 반환시킨다. 하지만 아래는? int x = 5; int y = x++; 사람은 y에 6이 들어가있길 바라지만, 실제로는 5가 들어있다. 물론 해당 라인의 실행이 끝난 이후에는 x에는 6이 정상적으로 들어가있다. 'x++'이라는 후위연산자의 리턴값은 컴파일러가 임시로 생성한 복사값이다. 후위연산이 실행되면 컴파일러는 임시객체에 변경하기전의 원본을 복사한다. 그리고 원본의 메모리에 ..