전체 글
-
next permutation 응용알고리즘 2022. 9. 30. 10:31
1. next permutation을 활용한 조합 구하기 #include #include using namespace std; int s[5] = { 1,2,3,4,5 }; int p[5] = { 0,1,0,1,0 }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n = 5; //내림차순 정렬 sort(p, p + n,greater()); //모든 순열을 구하기 위해서는 정렬이 필수. do { for (int i = 0; i < 5; i++) { if (p[i] == 1) { cout
-
ch02-2. 암시적(디폴트) 함수가 필요 없으면, 확실히 사용을 금하자.effective c++ & c++ 2022. 9. 26. 20:20
컴파일러가 자동으로 만들어 내는 디폴트 함수의 사용을 막기 위해서는, 멤버 함수를 private으로 선언해준다. 멤버 함수를 private으로 선언해 준 경우, 1. 명시적으로 멤버 함수를 선언해주었기 때문에, 컴파일러는 자동으로 디폴트 함수를 생성하지 않는다. 2. private으로 선언해주었기 때문에 외부로부터의 호출을 막을 수 있다. 이는 클래스의 멤버 함수 및 friend 함수에서 그 멤버 함수를 호출할 수 있다는 허점이 존재한다. 이 허점을 막기 위해서는 그 멤버 함수의 정의를 제외하는 방법이 있다. 즉, 멤버 함수의 선언만 존재한다. class HomeForSale{ public: ... private: ... HomeForSale(const HomeForSale&); //복사 생성자 Home..
-
ch02-1. 생성자, 복사 생성자, 복사 대입 연산자, 소멸자effective c++ & c++ 2022. 9. 21. 17:07
생성자, 복사 생성자, 복사 대입 연산자, 소멸자는 개발자가 클래스를 선언할 때, 직접 선언해 주지 않으면 컴파일러가 저절로 선언해 주도록 되어있다. 이는 public 함수이면서 inline 함수이다. template //템플릿 선언에서 typename과 class 키워드는 동일한 기능. class NamedObject{ public: NamedObject(std::string& name, const T& value); ... private: std::string& nameValue; const T ObjectValue; }; int main(){ std::string newDog("Persephone"); std::string oldDog("Satch"); NamedObject p(newDog,2); ..
-
ch01-4. 객체를 사용하기 전에 객체를 반드시 초기화하자.effective c++ & c++ 2022. 9. 6. 21:52
객체 초기화 규칙 - 비멤버 객체,기본제공 타입의 객체에 대해서는 손수 초기화 수행 필요. - 생성자에서는 그 객체 내의 모든 것을 초기화해준다. - 생성자에서 객체 내 모든 것을 초기화 시켜줄 때에는 이니셜라이저를 사용. - 비지역 정적 객체를 지역 정적 객체로 바꾸어, 여러 번역 단위에 있는 비지역 정적 객체들의 초기화 문제를 피하자. 어떤 객체이든 그 객체의 데이터 멤버는 생성자의 본문이 실행되기 전에 초기화되어야 한다. 즉, 생성자에서 대입 연산자를 통해 초기화되는 것은 '대입'이지 '초기화'가 아니다. - 생성자에서 대입 연산자보다 이니셜라이저(= 멤버 초기화 리스트)를 통해 멤버를 초기화해준다. 윤성우의 열혈 C++ 프로그래밍 책에서는 '멤버 이니셜라이저'라 칭하고 Effective C++ 책..