일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 충돌 알고리즘
- 유니티
- dp
- GJK
- uclidean algorithm
- 우분투
- 리눅스
- 문제풀이
- 알고리즘
- Graham Scan
- SOH
- 벡터
- Expanding Polytope Algorithm
- Unity
- ubuntu
- 다이나믹 프로그래밍
- PS
- 백준
- AABB
- 분할축 이론
- 보로노이다이어그램
- 수학
- linux
- Vector
- Doubly Connected Edge List
- c#
- 외적
- C++
- 내적
- C
- Today
- Total
목록Code/C, C++ (3)
마이 플밍 블로그
C++의 STL에는 Vector와 List라는 컨테이너가 있다. 언뜻보기에는 두 컨테이너에는 차이가 없는것 처럼 보이지만 사실 큰 차이점이 있다. 1. Vector Vector 컨테이너는 일반적인 배열처럼 연속적인 메모리 공간에 저장하는 방식. 후에 들어올 요소들을 대비해 미리 예비 공간을 할당함. 배열과 달리 크기의 제한을 받지않음.(32bit 기준으로 10억개 정도는 있긴함) 맨뒤에 추가하는건 빠르지만 중간에 삽입할 시 O(n)만큼의 시간이 걸림. 중간에 삽입시 원소들을 뒤로 밀어냄. [1] 과 같이 랜덤 접근이 가능함. 동적으로 크기가 확장되지만 비용이 큼 2. List List 컨테이너는 더블 링크드 리스트로 구현되어 있음. 값을 추가할 때마다 메모리를 할당함 중간에 있는 특정 원소를 찾기 위해서..
memset 함수는 메모리의 값을 원하는 범위만큼 값을 변경 시켜주는 함수다. 더보기 void* memset(void* ptr, int value, size_t num); 첫번째 ptr은 메모리의 시작 주소 두번째 value는 바꿀 값 세번째 num은 메모리 길이를 뜻한다. 이 길이는 바이트 단위로써 메모리 크기 한조각단위의 길이를 뜻한다. sizeof(타입) 으로 하면 된다. 함수가 제대로 작동하면 맨 처음인자인 ptr이 반환되고 실패하면 NULL을 반환한다. 예제 #include #include using namespace std; int main() { char arr[20]; cin >> arr; memset(arr, 'b', 3 * sizeof(char));; cout
함수는 사용될 때마다 일정량의 오버헤드를 발생시킨다. CPU가 함께 실행중인 다른 레지스터와 함께 사용 중인 함수의 주소를 저장해야 해서 모든 함수 매개 변수를 생성해야 한다. 할당 된 값을 사용한다면 프로그램이 새 위치로 분기된다. 내부에서 작성 된 코드가 더 빠르다. 함수 호출시 다음과 같은 과정을 거치게 된다. 함수 호출 -> 호출 된 시점의 함수 주소 값 스택에 저장 -> 함수 매개변수 스택에 저장 -> 함수실행 함수 종료 -> 함수 리턴 값을 임시 저장소에 저장 -> 스택에서 호출 시점 주소 값 가져옴 -> 호출 시점으로 복귀 엄청 큰 함수 몇개만 사용한다면 큰 문제는 없지만 작은 함수 여러개를 쓴다면 많은 성능저하가 일어날 것이다. 컴파일러에서는 이런 오버헤드를 줄이기 위해 스스로 코드를 최적..