코딩/C++

    [C++] 객체 지향 프로그래밍 - 얕은 복사와 깊은 복사 (Heap 메모리, Stack 메모리)

    [C++] 객체 지향 프로그래밍 - 얕은 복사와 깊은 복사 (Heap 메모리, Stack 메모리)

    객체 지향 프로그래밍 (Object Oriented Programming, 이하 OOP)에서의 데이터의 단위는 객체이다. OOP에서의 객체 복사는 기존 객체의 사본을 만드는 일이다. 복사의 방식은 얕은 복사(참조 형식)와 깊은 복사(값을 복사)가 존재하게 된다. 예시 코드 /* * OOP - 얕은 복사와 깊은 복사 */ #include using namespace std; class MyObject { public: string* name; int age; //기본 생성자 MyObject(int age, string name) { this->name = new string(name); this->age = age; } //기본 복사 생성자와 같음. 레퍼런스로 만들지 않으면 복사생 //MyObject(co..

    [C++] End Of File 처리.

    가끔 백준 문제를 풀 때(물론 원래는 다른 메모장 같은 거 읽을 때 쓰는 거겠지만..) 입력의 개수가 주어지지 않는 경우가 있다. 이럴 경우 수동으로 End Of File 처리를 해줘야 한다. while (true) { cin >> input; if (cin.eof()) { break; } // cin의 End Of File 처리 } 위 코드가 그 예시이다. input을 입력받는데, 더이상 입력받는 게 없을 경우 cin.eof()가 true가 된다. 콘솔 창에서는 윈도우에선 Ctrl + Z, 리눅스에선 Ctrl + D로 EOF처리가 가능하다.

    [C++] algorithm STL의 sort()와 queue STL의 priority_queue의 정렬 방식의 차이 - less와 greater

    Sort() - algorithm STL less : 오름차순 greater : 내림차순 priority_queue - queue STL less : 내림차순 greater : 오름차순

    [C++] priority_queue STL 비교 구조체 comparator 사용하기

    [C++] priority_queue STL 비교 구조체 comparator 사용하기

    algorithm STL에 있는 sort() 메서드를 사용할 때에는, 그냥 bool형 비교 메서드 하나만 만들어주면 됐었다. queue STL에 있는 priority_queue를 사용할 때에는 less()를 써서 내름차순으로 만들거나 greater()를 써서 오림차순으로 만들 수 있다. 그러나 class 형식으로 만들어서 쓰고싶을 때에는 구조체를 만들어서 그 안에 bool형 operator()(A, B)의 형태의 메서드를 만들어 주어야 한다. bool 메서드는 return true일 때 앞 뒤를 바꾼다고 생각하면 된다. 따라서 위처럼 만들 경우 p1의 시간, type에 따라 오름차순으로 정렬된다고 생각하면 된다. pq 선언은 다음처럼 해주면 된다.

    [C++] 문자열(문자)을 정수형처럼 다루는 메서드

    isdigit(Char c) : c 문자가 정수형으로 변환될 수 있는지 확인한다. atoi(char* c) : c 문자열을 정수형으로 변환한다. 이 때, string 형일 경우 반드시 str.c_str() 메서드를 호출하도록 한다. stoi(string s) : s 문자열을 정수형으로 변환한다.

    [C++] Map 자료구조 사용하기

    [C++] Map 자료구조 사용하기

    1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net Map 자료구조란? Key, Value를 쌍으로 가지는 자료구조로, Key에 따른 Value가 저장되는 형태를 갖는다. 여러 개의 같은 Value는 가능하지만 여러 개의 같은 Key는 불가능하다. 위 문제가 아마 Map 자료구조의 대표문제일 것 같다. C++에서 사용하는 법은 선언은 위처럼 할 수 있다. map STL을 include한 후, map 이름 으로 선언한다. map은 자동으로 pair자료형을 사용하고 있다. (key와 va..

    [C++] Comparator 사용시 주의사항

    [C++] Comparator 사용시 주의사항

    10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 위 문제를 풀면서 조금 헷갈리는 것이 있어서 메모기록용 글. 매개변수에서 앞에 있는 애가 배열의 앞 부분이고 뒤에 있는 애가 배열의 뒷 부분이라 생각하면 된다. 즉, 앞 뒤 라면 내림차순이다.

    [C++] 2차원 배열 0, -1로 초기화하기 memset 메서드 사용

    [C++] 2차원 배열 0, -1로 초기화하기 memset 메서드 사용

    C++에서 2차원 배열을 바로 초기화하는 메서드가 있다. memset이라는 메서드이다. memset(배열이름, 초기화시킬 값, 초기화시킬사이즈) 로 사용한다. 사용 예시는 위와같다. 위 처럼 사용할 경우, world배열의 모든 값이 다 0으로 초기화 된다. 초기화는 0 또는 -1로 초기화가 가능하다. memset의 시간복잡도나 이중 포문으로 초기화 시키는 것이나 큰 차이는 없다고 한다.

    <algorithm> STL에서 sort의 comparator 작성 시, invalid comparator 문제

    <algorithm> STL에서 sort의 comparator 작성 시, invalid comparator 문제

    1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 백준에서 해당 문제를 푸는데 문자열을 그냥 정렬하는 문제였다. 근데 sort에서 자꾸 invalid comparator문제가 발생해서 알아보았다. Sort 메서드에서 comparator로 들어오는 매개함수는 반드시 Strict Weak Ordering을 만족해야 한다. 이게 무슨말이냐면, A == B일 경우에는 A B도 false여야 한다는 말이다. 위처럼 comparator를 작성해서 사용했는데, 이 코드에서는 str1..

    [C++] std::sort 오름차순 내림차순 정렬

    [C++] std::sort 오름차순 내림차순 정렬

    greater와 less를 사용한다. int형 vector를 정렬할 때는 오름차순 : sort(vec.begin(), vec.end(), less()); 내림차순 : sort(vec.begin(), vec.end(), greater()); priority_queue 선언할 때와는 다르게 끝에 () 괄호도 추가해야 한다.