1) 표준 라이브러리 구성과 사용법
- 표준 라이브러리: 효율적이고 안정적인 코드 작성에 도움이 되는, 어느 프로그램에서나 자주 쓰는 코드를 제공하는 라이브러리.
- 입출력, 문자열처리, 컨테이너, 알고리즘 등의 기능 제공
- 표준 라이브러리 헤더 사이트에서 헤더파일의 목록을 찾아 쉽게 사용 가능
- 표준 라이브러리 사용방법:
#include <헤더파일이름>
ex)#include <iostream>
=> iostream 헤더파일의 모든 내용을 복사해 해당 소스파일에서 iostream 헤더파일에 정의된 기능 사용을 가능하게 해줌
- 일반적으로 헤더파일에는 함수와 변수가 선언만 되어있고, 실제 내용은 링크단계에서 자동으로 연결되는 표준 런타임 라이브러리에 구현되어있음
ex) std::cout 은 iostram 헤더에 선언되어있지만, 링크단계에서 연결되는 표준 런타임 라이브러리에 정의되어있음
2) 문자열 라이브러리
- 표준 문자열 라이브러리:
<string>
사용:#include <string>
- length: 문자열의 길이 반환
문자열.length()- size: 메모리의 크기 반환
문자열.size()- empty: 빈 문자열인지 검사 (true/ false)
문자열.empty()- append: 문자열 추가 (문자열 끝에 새로운 문자열 추가)
문자열.append("추가할 문자열")
문자열.append("추가할 문자열", 문자열 시작인덱스, 문자 개수)- find: 문자열 찾기
(원하는 문자열의 시작위치 반환, 찾지 못하면 string::npos 반환)
문자열.find("찾을 문자열")
문자열.find("찾을 문자")
문자열.find("찾을 문자열", 시작위치)- compare: 문자열 비교하기
0: 두 문자열이 완전히 같음
양수: 대상 문자열이 더 길거나 일치하지 않는 첫번째 문자가 더 큼
음수: 대상 문자열이 더 짧거나 일치하지 않는 첫번째 문자가 더 작음
대상 문자열.compare(비교할 문자열)- replace: 문자열 교체하기
문자열.replace(교체할 문자열)- wstring: 와이드 문자열: 유니코드 문자열 저장, 출력
#include <iostream>과 함께 사용, 와이드 문자열을 처리하기 위해 L 접두사를 사용
ex) 와이드 문자열 형식 활용std::wstring name; std::wcout <<L"이름을 입력하세요: "; std::wcin>> name;
3) 파일 시스템
- 파일 시스템: 데이터를 저장하고 관리하는 체계
파일 시스템 라이브러리: 파일에 관한 정보에 접근 가능 (파일 자체 읽기X)
(파일 읽기:<fstream>, 데이터의 입출력을 담당)- 파일 시스템 라이브러리:
<filesystem>
파일 시스템 라이브러리는 파일과 디렉터리 조작에 유용한 기능을 여럿 제공 (단, C++17 이상이 필요)
- 절대 경로와 상대 경로
- 경로: 해당 파일의 위치를 나타내는 고유 주소
- 절대 경로: 최상위 디렉터리인 루트에서 내가 원하는 파일까지의 전체 경로 (경로의 맨 앞이 루트로 시작)
- 상대 경로: 현재 위치를 기준으로 한 경로
- path: 파일 시스템 라이브러리에서 파일이나 디렉터리를 다루는 모든 함수가 매개변수로 받는 객체= 경로 나타내기
- exists: 해당 경로에 파일이 실제로 존재하는지 확인하는 함수
bool exists (const std:: filesystem:: path& p)
- 파일 시스템 활용하기
boost::filesystem: 표준 라이브러리보다 더 널리 사용되는 템플릿 라이브러리 집합, 대부분의 경우 헤더 파일만 포함하면 됨
boost::filesystem을 사용하려면 해당 시스템에 맞게 컴파일된 라이브러리가 필요- 디렉터리 생성:
create_directories- 파일 생성과 쓰기:
ofstream- 파일 닫기:
outFile.close,inFile.close- 파일 읽기:
ifstream- 파일 내용 한줄씩 읽기:
getline- 파일 삭제:
remove_all(디렉터리, 파일 모두 삭제)
+) directory_iterator: 특정 디렉터리에 대한 반복자 역할, 디렉터리 내의 파일과 하위 디렉터리에 대한 정보를 제공하며 각 반복에서 directory_entry 객체를 반환=> 디렉터리 내의 파일이나 디렉터리 작업 수행 가능
4) 기타 유용한 함수
- 난수 생성:
<random>헤더파일 이용
std::mt19937orstd::mt19937_64+mt_rand()
난수를 여러개 생성할 때 중복되는 난수가 발생하지 않게 하려면...
시드값 or 하드웨어 엔트로피 (시스템에서 발생하는 무작위성의 정도) 이용
(random_device클래스 이용해 하드웨어 엔트로피 이용 가능)
<random>이 제공하는 난수 생성 엔진
random_device(엔진의 시드값 생성)linear_congruential_engine(선형 합동 난수 엔진)mersenne_twister_engine(메르센 트위스터 난수 엔진)subtract_with_carry_engine(감산 캐리 난수 엔진)
- 수학 함수:
cmath헤더파일 이용
- abs: 절댓값
- sqrt: 제곱근
- pow: 거듭제곱
- exp: 지수함수
- log: 자연 로그
- sin, cos, tan: 삼각함수
- asin, acos, atan: 역삼각함수
- cell: 올림
- floor: 내림
- round: 반올림
- 복사 함수
- 얕은 복사: 주솟값을 복사, 두 객체가 동일한 메모리 공간을 참조하게 됨. 한 객체에서 값을 변경하면 다른 객체에서도 그 변경사항이 반영되기 때문에 메모리 관리에서 문제가 발생할 수 있음
따로 제공하는 얕은 복사 전용 함수는 X- 깊은 복사: 실제 값을 새로운 메모리 공간에 복사, 두 객체는 서로 독립적인 메모리 공간을 가지게 되어 한 객체의 변경이 다른 객체에 영향을 미치지 않습니다. 깊은 복사는 메모리 사용의 안전성을 보장
- copy: 깊은 복사 함수, 서로 다른 독립적인 메모리에 실제 값을 복사
깊은 복사를 반복문으로 구현하면 비효율적이기 때문에 제공
+) copy 함수 원형:template <class_InIt, class_OutIt> _CONSTEXPR20 _OutIt copy(_InIt _First, _InIt _Last, _OutIt _Dest)