c++ (24) 썸네일형 리스트형 C++) 함수를 static으로 선언 declare 한다는 것 멤버 함수를 static으로 호출 한다는 것 class instance를 만들지 않고 함수를 호출하겠다는 것 class의 static 멤버 변수만 가지고 놀려는 것 그 반면 일반 함수를 static으로 호출 한다는 것 static int getInt(int i) // 이 둘의 차이는 int getInt(int i) global 함수와는 다르게 static local 함수가 됨 이 말이란 같은 파일 내의 함수들 내에서만 static 함수를 호출 할 수 있음 C++) check whether file exists 파일 존재 여부 확인 [access(2)] 파일 존재 여부 확인 시 자주 사용하는 함수는 access 라는 함수 입니다. 함수의 정의 int access(const char* pathname, int mode) mode에는 파일의 어떤 부분을 확인 할지 전달 F_OK (파일 존재 여부) R_OK (파일 읽기 권한 여부) W_OK (파일 쓰기 권한 여부) X_OK (파일 실행 권한 여부) 함수의 반환 값 성공 시 zero 반환 실패 시 -1 반환 (errno is set) set 되는 errno 리스트 EACCES (권한 부족) ELOOP 등 사용 예제 확인 할 파일 경로 (const char *) : "/tmp/file" 확인 할 파일 부분 (int) : F_OK #include const char* file_path = "/tmp/file"; .. C++) static 멤버 변수 life cycle class encapsulation과 관계가 있다 static 멤버 변수는 외부에서 global하게 initialize 되어야 한다. static 멤버 변수는 class 내부에서 private 하게 선언되어 있어야 효과가 있다 외부 사람들은 쓰려면 클래스에서 정의된 getter 함수를 사용하여야 한다. C++) [스마트 포인터] weak_pointer, unique_pointer, shared_pointer unique_ponter는 이름이 말하듯이 unique 하게 한 곳에서만 해당 객체를 사용할 때 다른 곳에서는 쉽게 사용하지 못하도록 막는 smart pointer 이다. shared_pointer는 약점이 있다. A -> B를 참조하고 B -> A를 참조 할 때 메모리를 해제 할 수 없다. Scope에서 벗어나 A를 해제 하였을 때 B -> A를 참조해서 삭제 안됨. Scope에서 벗어나 B를 해제 하였을 때 A -> B를 참조해서 삭제 안됨. weak_pointer를 사용해서 위 문제를 해결 할 수 있다. B -> A shared_pointer를 이용하는 weak_pointer로 만들면 참조는 가능하지만 ref count를 증가시키지 않는다 weak_pointer는 ref count를 증가시키지 않는.. C++) std::bind 와 std::placeholders (std::placeholders::_1, std::placeholders::_2, ...) std::bind std::bind를 알려면 std::function을 알아야 해요 std::function C+11에서 나온 함수 포인터로 사용 할 수 있는 std::function std::function name = &함수 이런 식으로 선언을 해요 예) std::function myFunc = &calculate; 이때 calculate는 이미 bool calculate(int, int) 라는 형식을 갖고 선언이 되있어요. 그러면 다시 std::bind를 볼께요 std::bind std::bind는 반환값이 std::function 인데요 특정 인자를 갖거나 특정 객체의 함수를 부르도록 구체적인 std::function을 제공해요 위의 예) std::function myFunc = &calculat.. C++) RAII 디자인 패턴 RAII: Resource Acquisition Is Initialization. 리소스를 초기화 할 때 메모리 할당까지 이루어지는 방식이다. RAII를 기반으로 만들어진게 shared_ptr, unique_ptr이 있다. string을 예로 들어 설명 하겠다. class String { public: String() { new char[256]; } ~String() { delete[] char; } } 위 클래스 String은 RAII를 따르도록 구현되었다. String의 생성자에서 메모리를 할당하고, String의 소멸자에서 메모리를 제거한다. 이렇게 하므로서 얻는 장점은 다음과 같다. int main() { char* str = new char[256]; ... // 함수 실행 도중 error 발.. [백준 BOJ] C++) 1605번: 반복 부분 문자열 문제 링크 1605번: 반복 부분문자열 알파벳 소문자로 이루어진 길이 L인 문자열이 있다. 이 문자열의 부분문자열 중, 적어도 한 번은 반복되는 (다시 말해서, 전체 문자열에서 두 번 이상 나타나는) 부분문자열을 '반복 부분문자열'이라고 부르자. 문자열이 주어지면, 가장 긴 '반복 부분문자열'의 길이를 구하는 프로그램을 작성하시오. www.acmicpc.net 예제 이해 예제) tellmetellmetetetetetetetellme 의 부분문자열의 길이가 11이라고 한다 길이 11의 부분문자열을 찾는데 애를 먹었다 찾은 부분 문자열은 etetetetete 이다. 그 이유는? 풀이 접근 방식 길이 L의 부분 문자열을 찾는다. 부분 문자열을 찾고 없으면 길이 L-1의 부분 문자열을 찾는다. 소스 코드 (1차.. [프로그래머스] (C++) 섬 연결하기 문제 링크 접근 방식 우선 costs를 정렬한다. 가장 적은 cost 다리부터 건설 한다. 연결되는 섬은 연결되었다고 기록 그 다음 다리를 건설 한다. 다리가 이미 연결된 두 섬을 연결한다면 PASS 한 섬이라도 새로 연결된다면 다리 건설 새로 연결되는 섬은 연결되었다고 기록 모든 섬이 한번씩이라도 연결됬으면 연결 완료 소스 코드 (1차) #include #include #include using namespace std; int solution(int n, vector costs) { int answer{0}; bool* boolList{new bool[n]()}; sort(costs.begin(), costs.end(), [](const vector & a, const vector & b) { ret.. 이전 1 2 3 다음