본문 바로가기

Study/C++

(17)
C++ 반복문을 이용해서 코드 줄이기 개요 next라는 변수의 값만 바뀌고, 나머지는 동일한 내용이 반복되는 코드였다. next = {cur+1, cur-1, cur+cur}로 선언하여 간결하게 코드를 작성할 수 있다. 예시 기존 코드 while(!q.empty()){ int cur = q.front(); q.pop(); int next = cur+1; if(next =0){ if(dist[next]==-1){ q.push(next); dist[next] = dist[cur]+1; } } next = cur+cur; if(next < MAX){ if(dist[next]==-1){ q.push(next); dist[next] = dist[cur]+1; } } } 개선한 코드 while(!q.empty()){ int cur = q.front()..
priority_queue에 struct를 넣을 때는 연산자 오버로딩이 필요하다 연산자 오버로딩이 없으면 위와 같은 에러가 난다. priority를 정해줄 수 없어서 그런 것 같다. `operator
memset으로 bool값을 true로 설정해도 될까? 개요 memset은 1byte 단위로 해당 메모리 값을 초기화 시킨다 memset(포인터, 설정할 값, 크기) : void *memset(void *_Dst, int _Val, size_t _Size); : 끝나고 값 설정이 끝난 포인터를 반환한다. memset으로 int나 long 값을 10진수로 설정해줄땐 -1과 0밖에 설정하지 못한다. 물론 다른값을 설정할수도 있지만 그러면 원하는대로 안 들어간다. 이렇게만 가능! int num; memset(&num,-1, sizeof(num)); memset(&num, 0, sizeof(num)); 왜냐하면 memset은 1바이트 단위로 값을 넣기 때문이다. 0으로 초기화하는 경우를 보자. 1byte는 2진수로 00000000이다. 이걸 int크기인 4바이트로 ..
C++ filesystem:: C++에서 파일디렉토리/파일 시스템 읽어오기 C++17에서 추가된 라이브러리를 이용하면 파일 시스템을 읽어올 수 있다. 원래 boost에 있던건데 정식으로 추가됐다. 사용법: #include namespace std::experimental::filesystem; g++ main.cpp -lstdc++fs gcc 8버전 이상부터는 experimental을 빼고 그냥 #include 하면 된다. 폴더 내 모든 폴더명/ 파일명을 긁어오는 예제 for(auto& p: fs::recursive_directory_iterator(path)) { cout
헤더파일에 using namespace를 하지 말아야 하는 이유 using 지시문 Using 지시문을 사용 하면 네임 스페이스 이름을 명시적 한정자로 사용 하지 않고 네임 스페이스 의 모든 이름을 사용할 수 있습니다. 네임 스페이스에서 여러 다른 식별자를 사용 하는 경우 구현 파일 (예: * .cpp)에서 using 지시문을 사용 합니다. 하나 또는 두 개의 식별자만 사용 하는 경우에는 using 선언을 사용 하 여 네임 스페이스의 모든 식별자가 아닌 해당 식별자를 범위로 가져옵니다. 지역 변수의 이름이 네임스페이스 변수와 동일한 경우 네임스페이스 변수가 숨겨집니다. 전역 변수와 동일한 이름을 가진 네임스페이스 변수를 사용하면 오류가 발생합니다. 참고 using 지시문은 .cpp 파일 맨 위나(파일 범위) 클래스 또는 함수 정의 내에 배치할 수 있습니다. 일반적으로 ..
[Error]undefined reference to ~ 해결법 vscode로 코딩하고있었는데 이런 에러가 떴다. 이 에러가 뜨는 이유는 링커가 저 `TestClass()`의 위치를 못 찾았기 때문이다. 일단 이것부터 확인하자. - 메소드를 구현했는가? .h에 선언만 해 놓고 .cpp에 구현은 아직 안 한게 아닌가? - .cpp에 scope를 잘 지정했는가? void ClassName::method(){}이렇게 namespace를 잘 지정해줬는가? 위 조건을 지키면 웬만하면 해결된다. 만약 해결되지 않는다면 문법 오류가 아니고 링커 오류다. 링커 오류가 났을 때 해결법은 두 가지다. 1. 생성자 구현을 헤더 파일안에서 inline으로 해주거나, 2. g++로 컴파일할때 링크를 건드리거나. 1. 헤더 안에서 구현하기 간단한 방법이다. 헤더에서 구현해버리자. 대신 이렇게..
C/C++에서 다른 프로그램 실행하기 https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044654269&id=1043284392 불러오는 중입니다...
algorithm 헤더 대신 #define 이용하기 알고리즘 헤더 대신 #define을 이용해보자. #define MAX(a,b) (a>b? a: b) #define MIN(a,b) (a