일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Python
- logistic regression
- 텐서플로
- Softmax classification
- 인공지능
- programmers
- 기능개발
- pwnable.kr
- Linear_regression
- leg
- Algorithm
- tensorflow
- AI
- Today
- Total
목록C++ (8)
나혼자 공부장
Item 18: Use std::unique_ptr for exclusive-ownership resource management. 소유권 독점 자원의 관리에는 std::unique_ptr을 사용하라 unique_ptr : 독점 소유권 의미론을 가진 자원의 관리를 위한, 작고 빠른 이동 전용 스마트 포인터 shard_ptr의 단점 1. 참조 계수를 관리하기 위해 나타나는 overhead 2. raw pointer로 복귀 불가 + shared_ptr 에서 unique_ptr 변환은 불가능하지만, 그 반대는 가능하다. + shared_ptr은 raw pointer 메모리의 2배를 차지하지만, unique_ptr 은 raw와 정확히 같은 메모리를 할당받는다. -> 소유권 독점 여부가 정해져있다면, 굳이 sha..
Item 7: Distinguish between () and {} when creating objects. 객체 생성시 괄호와 중괄호를 구분하라 중괄호 초기화는 축소 변환, C++의 가장 성가신 구문 해석 등에서 자유롭다. int x(0); // 소괄호로 초기화 int y = 0; // 등호로 초기화 int z{0}; // 중괄호로 초기화 int z = {0}; // 기본적인 중괄호 초기화와 같음 우리는 객체 생성, 함수 정의 등등 여러 용도로 괄호를 쓴다. 그러나, C++은 함수의 정의로 해석이 가능한 것은 모두 함수의 정의로 해석한다. -> 괄호를 쓸 때 우리의 의도대로 동작하지 않을 수 있다. uniform initialization (균일한 초기화) 쉽게 말해 문제가 되는 상황에서 괄호를 중괄호..
Item 5: Prefer auto to explicit type declarations. 명시적 타입 선언보다는 auto를 선호하라 1. 왜 auto인가? 1) 이식성 또는 효율성 문제를 유발할 수 있는 타입 불일치가 발생하는 경우가 거의 없다. 2) 대체로 변수의 타입을 명시적으로 지정할 때보다 타자량이 적다. 단, 반드시 초기화해야함 template // b에서 e까지의 구간에 있는 모든 void dwim(It b, It e) // 요소에 대해 dwim("do what I mean") { // 알고리즘을 수행한다. for (; b != e; ++b) { typename std::iterator_traits::value_type currValue = *b; ... } } // auto를 사용하면 훨씬..
Item 1. Understand template type deduction. (템플릿 타입 추론 규칙을 숙지하라) 템플릿 타입 추론 도중에 참조 타입의 인수들은 단 하나의 경우를 제외하고 참조성이 무시된다. 그 예외는 밑에서 차차 설명하도록 하겠다. template void f(ParamType param);// ParamType : const T& f(expr); 위와 같이 선언되어 있다면, expr에 int 형의 변수를 넣었을 때 최종 ParamType은 const int&가 된다. 즉 템플릿이 추론한 타입은 expr 뿐만이 아닌, ParamType의 형태에도 의존하게 된다. 그 경우는 총 세 가지로 나뉜다. Case 1. ParamType이 포인터 혹은 참조타입이긴 하나, universal ref..
Chapter 13에서 공부한 내용의 확장 1. Point 클래스 템플릿과 배열 클래스 템플릿 만약 클래스 템플릿을 기반으로 템플릿 클래스의 객체를 저장해야 하는 경우도 있을 것이다. 아래와 같이 선언한다. BoundCheckArray oarr(50); BoundCheckArray oparr(50); /*** typedef 선언 사용 ***/ typedef Point* POINT_PTR; BoundCheckArray oparr(50); 2. 특정 템플릿 클래스의 객체를 인자로 받는 일반함수의 정의와 friend 선언 /*** 특정 템플릿 클래스에 한정해서 멤버 함수 선언 ***/ #include using namespace std; template class Point { private: T xpos, ..
#include using namespace std; class Point { private: int xpos, ypos; public: Point(int x = 0, int y = 0) : xpos(x), ypos(y) {} void SetPos(int x, int y) { xpos = x; ypos = y; } void ShowPosition() const { cout
템플릿에 대한 이해와 함수 템플릿 함수 템플릿 : 함수를 만드는 도구 함수 템플릿은 다양한 자료형의 함수를 만들어낼 수 있다. 함수의 기능은 정해져있고, 용도에 따라 달라지는 자료형을 결정하기 위한 템플릿이라고 이해하면 된다. 아래와 같이 정의한다. template //template 와 같은 의미 T add(T num1, T num2){ return num1+num2; } 예제 1. /* 덧셈 템플릿 구현 및 사용 */ #include using namespace std; template T Add (T num1, T num2){ return num1+num2; } int main(void) { cout
1. 포인터와 참조자를 구별하자 포인터는 null 가리키는게 되는데 참조자는 안 됨. 무조건 객체를 가리켜야 한다 포인터 - 다른 객체 참조할 수 있음 참조자 - 초기화할 때 참조했던 그 객체만 참조 가능 operator[] 을 사용해야 할 때 참조자로 반환하도록 하는게 보통 2. 가능한 C++ 스타일의 캐스트를 즐겨 쓰자 캐스트는 형변환이라는 뜻 C스타일 캐스트의 문제점 - 아무 생각이 없다 - 눈으로 찾아내기가 힘들다 .. 소스코드 안에서 괄호 쓰는게 한두개가 아니기 때문 아래는 cast 연산자 예시 중 하나고 C언어 : double result = ((double) firstNumber) / secondNumber C++ : double result = static_cast (firstNumber)..