c++
-
C++ Primer CH11. Associative Containersc++ 2024. 1. 21. 16:27
정렬하고 싶을 때, bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs) { return lhs.isbn() < rhs.isbn(); } multiset bookstroe(compareIsbn); Pair pair anon; pair word_count; pair line; p.first p.second pair 리턴하기 pair process(vector &v) { if (!v.empty()) return {v.back(), v.back().size()}; else return pair(); } set::key_type k1; // string set::value_type v1; // string map::key_type k1; // strin..
-
C++ Primer CH10. Generic Algorithmsc++ 2024. 1. 21. 16:26
알고리즘 함수 종류는 100여개가 넘는다. 다 외우기 힘드니까 분류를 해보자 10.2.1 Read-Only Algorithms 10.2.2 Write Container Elements Algorithms 10.2.3 Reorder Container Algorithms 10.3 Customizing Operations 10.3.1 Passing a Function to an Algorithm predicates 조건으로 활용될 수 있는 expression(표현식), 함수 10.3.2 Lambda Expressions 이름 없는 inline 함수라고 생각하면 된다. Lambda 형태 [capture list](parameter list) -> return type { function body } [sz](c..
-
C++ Primer CH9. Sequential Containersc++ 2024. 1. 21. 16:24
vector같은 컨테이너들은 내부에 자신의 크기 변수를 가지고 있어서 size()함수는 O(1)이다. 어떤 컨테이너 쓸 지 결정하는 법 일반적인 경우 vector 사용 작은 요소들이 많고 space overhead가 걱정되면 list나 forward_list 쓰지 말라(다음 노드 가리키는 포인터 필요해서) random access 필요하면 vector나 deque 쓰기 컨테이너 중간에 추가해야 할 일이 많으면 list나 forward_list → vector는 각 원소를 복사해야 하는 비용이 추가적으로 들음 맨앞, 맨끝에 추가하거나 제거할 일이 많으면 deque 중앙에도 추가하고 랜덤 엑세스도 해야하면, 일단 list로 입력받아서 컨테이너 중간에 집어넣고 deque에 list를 복사 정말 중앙에 넣어야 ..
-
C++ Primer CH8. The IO Libraryc++ 2024. 1. 21. 16:22
지금까지 우리는 유저 콘솔에 찍히고 입력받는 IO 클래스(cin, cout)만 사용했었다. 근데, 파일을 읽고 써야 할 때는 무엇을 사용하는가? 여러가지 IO 타입들 w 붙으면 wide string(wchar_t) 지원 Relations among the IO Types IO type들은 클래스로서 상속관계에 있기 때문에 모두 같은 연산자(>>, 나 모두 파일을 여는 작업인건 같다. -> fstrm open(s)는 이전에 생성한 fstream을 이용해 파일 open은 이후에 필요할 때 하는 것이고, -> 차이는 fstream fstrm(s)는 fstream을 생성함과 동시에 파일을 여는 것이고, -> 같은 fstream을 여러번 사용해서 open할 수 있다. IO 클래스들도 모두 상속관계에 있는 클래스들..
-
C++ Primer CH7. Classesc++ 2024. 1. 21. 16:16
Defining a Member Function outside the Class 클래스 내에 선언된 모양과 똑같이 정의내려야 한다. 일단 컴파일러가 함수 이름을 보면, 나머지 코드는 클래스 내부에 있는 것처럼 해석한다. 따라서 멤버변수 사용할 수 있다. double Sales_data::avg_price() const { if (units_sold) return revenue/units_sold; else return 0; } return *this; → 인스턴스 참조자가 리턴됨 7.14 Constructors default constructor Sales_data total; 이런식으로 선언만 해주는 것처럼 보이는데, default constructor가 호출된다. 인자 아무것도 안 넣는 경우의 con..
-
C++ Primer CH6. Functionsc++ 2024. 1. 21. 16:14
6.1 Function Basics 함수 밖에서 정의된 객체는 프로그램 실행이 끝날 때까지 존재한다. 함수 안에서 정의된 지역 객체는 어떻게 정의되었는지에 따라 생명주기가 다르다. Automatic Objects :함수가 실행되는 동안만 살아있는 객체들 인자(파라미터)도 여기에 포함됨. 함수 시작시 파라미터가 저장소에 할당됨 지역변수 Local static Objects : 함수 내에 정의된 객체인데 함수가 끝났는데도 살아있는 static 객체 프로그램이 끝나면 파괴됨 default 초기화 값은 0이나 “”같은 것들이다.(value initialization) 6.1.2 Function Declarations 함수 선언은 헤더파일에 한다. 이후, 함수 정의 파일에서 해당 헤더파일을 include한다. 6..
-
C++ Primer CH4. Expressionsc++ 2024. 1. 21. 16:11
Lvalues and Rvalues 모든 표현식은 rvalue거나 lvalue이다. lvalue: 주소를 나타내는 표현식. rvalue: 값을 나타내는 표현식. object를 lvalue로 쓰면 memory 위치를 사용하는 것과 같고, rvalue로 쓰면 값(내용물)을 사용하는 것과 같다. decltype과 lvalue, rvalue간의 관계 할당은 오른쪽 결합이다(right associative) int ival, jval; ival = jval = 0; //ok int *pval; ival = pval = 0; // error, pval이 포인터라서 ival에 할당 안됨. 전위 증가와 후위 증가 int i = 0, j = 0; j = ++i; // i를 증가시키고 그 자체 반환, 반환값lvalue j..
-
C++ Primer CH3. Strings, Vectors and Arraysc++ 2024. 1. 21. 16:10
3.1 Namespace using Declarations scope operator ex)std::cin → std 네임스페이스에서 cin 네임을 사용하고 싶다. using namespace std; cin >> val; // using 안쓸 경우, std::cin >> val; header파일 내에는 using 선언자(declaration) 사용하면 안됨 해당 header 파일을 사용하는 모든 파일 내에서 해당 네임스페이스가 사용되므로 예기치 못한 이름 충돌 발생 가능성 존재. 3.2 Library string Type string variable-length sequence of characters 초기화 방법들 string s1; // default initialization, empty stri..