객체 배열 생성 및 소멸 (Java와 다른 점) 객체 배열 생성 * 객체 배열에서 JAVA와 차이점이 많다. // JAVA의 경우 Vector[] list = new Vector[10]; //C++의 경우 Vector* list = new Vector[10]; * 코드상에서는 비슷하지만 내부적으로 전혀 다른 구조를 가진다. * Java = Heap에 객체 포인터를 배열로 생성 * C++ = Heap에 실제 객체를 배열로 생성 * C++는 객체를 배열로 생성한다. 기본 생성자는 초기화가 이루어지지 않는데, 배열로 생성해도 초기화는 없다. * Java는 바로 객체 배열을 만들 수 없다. 포인터 배열이 만들어지며, 객체를 따로 생성해 연결해야 한다. (자바에서 배열은 이중 포인터를 사용해야 한다.) (포인터를..
해시 테이블 Hash Table 1편이 있어용 해시 테이블 Hash Table * 해시 테이블이 시간 복잡도 O(1)을 가지기 위해서는 해시 값과 인덱스가 쉽게 매칭이 되어야 한다. * 하지만 해시 값의 중복이나 인덱스의 중복으로 인해 둘의 관계가 직관적이지 못 할 수 있다. 해시 값의 중복 1. 상황에 맞는 해시 함수 선택 해시 함수에 따라 중복 확률이 다르며 같은 해시 함수라도 자료형이나 크기에 따라 중복되는 확률이 다르다. 상황에 맞는 해시 함수를 선택하는 것만으로 충돌을 많이 피할 수 있다. 1-1. 하지만 완벽하지는 않다. 상황에 맞는 해시 함수를 선택한다 해도 해시 함수는 어쩔 수 없이 중복이 생기는 함수이다. 다른 해결책과 같이 사용하는 것이 좋다. 1-2. 완벽할 수도 있다. 해시 함수에 ..
해시 Hash 해시란? Hash~ * 해시는 해시 함수와 함수에서 나온 해시 값이 있다. 해시 함수에 매개변수로 들어가는 값은 크기와 자료형에 구애를 받지 않는다. 반환되는 해시 값은 의도적으로 고정된 길이의 데이터로 바뀐다. * 부동소수점형이나 길이가 고정되지 않은 문자열 등을 언제나 정수형으로 바꾸는 함수를 해시함수라고 할 수 있다. * 데이터 → 해시 함수 → 해시 값 * 해시 함수는 특정 값을 넣으면 언제나 같은 값을 반환한다. a를 넣어서 b가 나온다면, a를 몇 번을 넣어도 언제나 b가 나온다. * 하지만 a를 넣어도 b가 c를 넣어도 b가 나올 수 있다. 이는 매개변수의 폭은 넓은데 반환값은 고정된 크기로 바뀌는 데에서 기인한다. 해시를 사용해서 좋은 점 * 해시 함수를 사용하여 임의의 데이..
struct (구조체) 구조체를 매개변수로 넘길 때 void fuc(구조체); * 구조체를 매개변수로 넘기거나 대입하는 것만으로 복사가 일어난다. 알아서 전부 복사해주니 편하다. * 구조체의 크기가 클 경우, 매번 일어나는 복사는 무거울 수 있다. void fuc(*구조체); * 단 4바이트! * 복사가 훨씬 안전해. 참조의 경우 원본 손실이 발생할 수 있다. * (*구조체).변수 = 값; * 구조체->변수 = 값; (둘 중 하나를 써야 함) 구조체에 배열을 넣을 때 1. 배열 포인터만 넣을 때 typedef struct { char* name1; char* name2; char* name3; char* name4; } name4_t; ↑ 크기가 단 16바이트! 얕은 복사와 유동적인 주소값이라는 제한적 ..
구조체 struct 구조체란? * 여러 자료형을 가진 변수들을 하나의 패키지로 묶은 것 * 구조체 또한 값형이며 참조하고 싶으면 포인터를 사용하자 * 구조체라는 개념을 컴퓨터는 모른다. 사용자의 편의를 위한 개념일 뿐 내부적으로는 독립된 변수들을 사용하는 것과 같다. 장점 (사용하는 이유) * 여러 변수들을 하나에 개념으로 묶을 수 있다. (직관성 상승) struct personal_Information { //인적 사항이라는 개념 아래에 묶인 변수들 char name[20]; int age; float height; float weight; }; * 함수에 매개변수가 여러개일 때 실수를 줄이기 위해 (같은형이나 묵시적 변환이 가능한 자료형이 매개변수로 여러 개 들어가는 함수) int addPerson(..