std::for_each. std::find_if, std::any_of, std::count_if 등등 있는데
주의 해야할 부분이 std::remove_if 이거임
vector특성상 erase가 개 느리기 때문에 필요없는 부분을 남기는 느낌이 강함.
그래서
v1.erase(std::remove_if(v1.begin(0, v1.end(), [](int& n) { return n % 2 ==0; }), v1.end());
이런식으로 지운다.
remove_if iterator를 반환함.
참조, 포인터 무시함
그래서 "auto&" value = vec[0]; 이런식으로 명시 해주어야함.
중괄호 초기화
initialize_list 를 인자로 받는 생성자
0, NULL 쓰지말고 nullptr 써라
typedef 말고 using 써라
template <typename T>
using List<T> = std::list<T>;
List<int> l1;
이렇게는 가능하지만
template <typename T>
typedef std::list<T> List<T>;
이런거는 안됨.
scope이냐 unscope이냐 차이점
복사 생성자나, 복사대입 연산자 막을 경우 void Test() = delete;
상속받는 자식 클래스 함수에다가
virtual void Attack() override;
virtual void Attack() final;
임시객체를 Knight& knight로 받을 수 없다.
사라질 녀석인데 TestKnight_LValueRef에서 수정하거나 할 수도 있기 때문에 => 좀 당연한 소리가 된다.
반면에 const Knight& knight는 받을 수 있음. => 이것도 좀 당연하게 const붙으면 수정을 할 수 없으니까 가능한거임.