본문 바로가기

전체 글

(228)
얕은 복사 깊은 복사 얕은 복사 값, 주소만 복사한다. 깊은 복사 복사 시 메모리를 새로 할당한 후 포인터가 가리키는 주소의 값을 넘겨준다. 모든 클래스는 디폴트 복사 생성자를 가지고 있다. #include #include #include #include using namespace std; class A { public: int* numP = nullptr; int num = 5; // 얕은 복사 /*A(const A& a) { this->numP = a.numP; this->num = a.num; }*/ A(int& c) { numP = &c; } // 깊은 복사 A(const A& a) { this->num = a.num; // 매개변수 a의 numP가 널값이 아닐 때 if (a.numP != nullptr) { thi..
함수 포인터 변수와 같이 함수도 선언한 후 실행하면 CPU에서 메모리에 주소가 할당된다. 함수의 이름은 함수의 주소를 담고 있다. int Add(int a, int b) { return a + b; } int main(void) { cout
백준 11650 2차원 좌표 평면의 (x,y)의 좌표 정렬 문제. x,y 를 가지는 PINT2 구조체를 만들어 동적할당으로 배열 크기를 정해주고 sort 알고리즘에 Compare 함수를 만들어서 풀었다. #include #include #include #include using namespace std; struct PINT2 { int x; int y; }; bool Compare(PINT2 a, PINT2 b); int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int pointNum = 0; cin >> pointNum; PINT2* points; points = new PINT2[pointNum]; for (int i = 0;..
포인터 변수를 초기화한 뒤 실행하면 CPU에서 RMA의 메모리의 어느 위치 해당 변수가 설정된다. 그리고 변수에 사용할 때마다 설정된 메모리의 주소를 접근한다. 포인터는 메모리의 주소를 저장하는 변수이다. 포인터 변수는 변수 선언에서 자료형과 식별자 사이에 *를 넣는다. 이때, *는 곱셈과는 다르게 단항연산이다. (곱셈의 * 는 이항 연산이다.) 포인터의 *를 역참조 연산자라고 부른다. 포인터 변수가 주소를 저장하기 위해서는 넘겨줄 주소를 설정해줘야하는데 주소연산자 &를 사용한다. // 일반적인 변수 선언 int num = 0; // int 형 자료의 주소를 받는 포인터 선언이다. int *p = # // 여기서 *는 역참조 연산자로 곱셈과는 다르다. // &는 주소 연산자로 비트 연산과는 다르다. 참고..
백준 1120 #include #include using namespace std; int main(void) { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string a, b; cin >> a >> b; int num2 = 50; int num3 = a.size(); // hello int num4 = b.size(); // asdqwe for (int i = 0; i = num) { num2 = num; } if (num3 > num..
STL MAP map 각 노드가 key와 value 쌍으로 이루어진 트리입니다. 특히, 중복을 허용하지 않습니다. 따라서 map은 first, second가 있는 pair 객체로 저장되는 데 first- key로 second- value로 저장됩니다. C++의 map의 내부 구현은 검색, 삽입, 삭제가 O(logn) 인 레드블랙트리로 구성되어 있습니다. 형태 map 변수이름; 정렬 map 은 자료를 저장할 때 내부에서 자동으로 정렬한다. key 를 기준으로 정렬하고 오름차순이다. 내림차순으로 하고 싶다면, 1. map 변수이름;\ 2. int 형 등의 데이터를 내림차순으로 정렬할 경우, 데이터에 - 를 붙여 삽입해주면 내림차순 정렬이 된다. 등의 방법이 있다. map 을 사용하려면 #include 을 추가해야한다. m..
deque(double ended queue) vector의 단점을 보완하기 위해 만든 컨테이너이다. 배열기반의 구조. vector는 새로운 원소가 추가 될 때 메모리 재할당 후 이전 원소를 복사하기 때문에, 삽입 때 성능이 저하 되는 단점이 있다. deque 는 vector 의 단점을 보완하기 위해서 여러개의 메모리 블록을 할당하고 하나의 블록처럼 여기는 기능이 있다. deque 는 메모리가 부족할 때 마다 일정한 크기의 새로운 메모리 블록을 할당한다. 따라서 이전 원소를 복사하지 않는다. 데이터의 삽입 삭제가 front 와 back 에서 이루어 질 수 있다. deque 는 중간 원소도 삽입 삭제가 가능하다. deque 의 생성자 및 연산자 deque dq; - 비어있는 deque dq 를 생성합니다. deque dq(10); - default(0..
내적과 외적 내적 일반적 정의 : 두 벡터의 각 성분끼리의 곱의 합 두 개의 벡터가 있을때 한 벡터의 방향으로 나머지 하나를 projection(투영) 시킨 것과 다른 한 벡터의 크기의 곱 내적 연산은 벡터 두 개를 하나의 스칼라 값으로 변환시키는 연산 벡터의 내적은 두 벡터의 각 성분끼리의 곱의 합으로 정의한다. 사진 삭제 사진 설명을 입력하세요. 두 벡터가 이루는 각의 크기를 세타라고 한다면 벡터의 내적은 다음과 같이 정의한다. (정의.2) 대표사진 삭제 사진 설명을 입력하세요. (정의.1)과 (정의.2)에 따라 두 벡터의 좌표가 주어지면, 두 벡터간의 사잇각을 알 수 있다. 내적(inner product) 두 벡터의 사이각을 알아내는데 유용하다 내적은 스칼라곱(scalar product) 또는 dot produ..