
가끔 레퍼런스랑 포인터랑 사용을 혼돈 할 때가 있다. 이터레이터(iter) 경우도 있고 막 &(*) 여러 시도하다가 빌드 오류 안나면 그냥 넘어가는 경우가 있었다. 그럴 때 마다 한 번 제대로 정리 해야겠다. 생각하면서도 넘어가는 경우가 많았다. 오늘은 진짜 .. 정리 한 번 해보려고 한다. 내용은 [전문가를 위한 C++(개정 4판)]이다. 1.레퍼런스 초기화레퍼런스는 처음 초기화 할 때 지정한 변수만 가리킨다. 한 번 생성되고 나면 가리키는 대상을 바꿀 수 없다. 레퍼런스를 선언 할 때 어떤 변수를 '대입'하면 레퍼런스는 그 변수를 가리킨다. 하지만 이렇게 선언된 레퍼런스에 다른 변수를 대입하면 레퍼런스가 가리키는 대상이 바뀌는 것이 아니라 레퍼런스가 원래 가리키던 변수의 값이 새로 대입한 변수의 값으..

" 함수 뒤 const " class Test { public: void ResizeVector(int num) const { vec.resize(num); } private: vector vec;} 위에 있는 함수는 컴파일이 될까? 정답은 안된다. 이유는 함수 뒤 const 때문에 vector 내장함수인 resize를 사용할 수 없다.함수 const에 대해서 간단하게 알아보자. [ 의미 ] - 해당 함수에서는 해당 객체의 멤버변수를 변경할 수 없다. - 여기서 이번에 새로 알게 된 사실은 멤버변수에 순차 컨테이너 vector가 있었는데 vector 내장 함수도 제한 받는다는 것이다.어찌보면 당연한거지만 ...? 컴파일 전에 오류메시지를 뱉는게 신기했다...

"c++20 STL::Container #2" 1. contains기존 map, set 데이터 find함수 사용 시 반복자와 end반복자가 같지 않은 지 비교하는 방식이였다. std::set s {1, 2, 3, 4, 5}; auto findset = s.find(2);if (findset != s.end()){ cout m {{1, 1000}, { 2, 2000 }}; auto findmap = m.find(2); if(findmap != m.end()){ cout second c++20에서 새로 추가 된 contains는 associate container의 내장함수로 찾으려는 키값을 넣으면 true, false로 그 key의 존재 여부를 알 수 있다. if (findset.contains(2)..

"c++20 STL::Container #1" 1. std::to_array std::array 만드는 방법이 추가되었다. //암시적 타입 추론 auto ToArray = std::to_array("Hello World");//명시적 타입 추론auto ToArray = std::to_array({ 1,2,3,4,5,6 }); 2. std::erase, erase_if 기존에 vector 데이터 중 특정한 조건에 부합하는 데이터를 삭제하려고 할 때 여러가지 방법과 문제점을 알아보자.// 1번 ====================================================================vector vec {-1, 2, 3, 4, -5, 7, -2, 3 }; for (auto i..

"(c++20) Conditional Explicit Constructor" 1. explicit // c++11 struct NoExplicit{ NoExplicit() = default; NoExplicit(int n) { cout TestNoExplicit(10); // - ???? error X TestNoExplicit() NoExplicit struct 자료형을 매개변수로 받고 있다. 그럼 매개변수에 NoExplicit struct 이 외에 다른 자료형이 들어간다면 에러를 뱉어내는게 정상이다. 하지만 위 코드에서 TestNoExplicit(10) 에러를 뱉어 낼거 같지만 정상 작동한다. 이는 컴파일러에서 "10"을 NoExplicit(int n)" 생성자를 이용하여 암시적 형변환을 ..
![(c++20) [Three-way Comparsion(3방향 비교 연산자)/우주선] 연산자](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlbkUC%2FbtsIdzlGy41%2FZoYcnXXQuigohei3aLGWI1%2Fimg.png)
"(c++20) Three-way Comparsion(3방향 비교 연산자)/우주선" c++20에 추가된 것 중에 아주 편안한 연산자 오버로딩이 생겼다. !! 지금은 아니더라도(?) 아주 유용하게 쓰일 거 같은 녀석이라서 정리해본다. class나 struct를 만들어서 그 객체끼리 비교를 하기 위해서는 필요에 따라 [ '' '>=' '==' '!=' : 6개] 연산자 오버로딩을 해야한다. 하지만 여기서 c++20에 추가된 Three-way Comparsion 연산자를 사용하면 6개를 포함한 operator하나만 정의하면 된다. #include using namespace std;struct Myoperator{ Myoperator(int value) : _value(value) { } //auto ope..

"(c++20) consteval, constinit" C++20에 추가된 Language 중 consteval, constinit에 대해서 알아보고 기존에 있었던 const와 constexpr과 비교해보려고한다. 일단 어떤 단어의 줄임말인지 확인하고 넘어가자 ~const: Constant 상수constexpr: Constant Expression 표현// c++11consteval: Constant Evaluation 검증 // c++20 constinit: Constrant Initialization 초기화 // c++20함수에 키워트를 붙였을 때, 변수에 키워드를 붙였을 때를 나눠서 정리해보았다. 1. 함수 (일반 vs constexpr vs consteval) 먼저 선행해야 할 개념은 런타임(..
![[c++17] 전문자를 위한 c++17 새로운 내용 북마크](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH3lZX%2FbtsFGqxSJAh%2FmKEe7KW0X9rn98ZGVXISNK%2Fimg.png)
c++17에 추가된 문법을 도서 "전문가를 위한 C++17(개정4판)"에서 빠르게 찾기 위해서 정리해보았다. page 58중첩된 네임스페이스 (nested namespace)61std::byte69if문의 이니셜라이저(intializer : 초기자)72switch문의 이니셜라이저(intializer : 초기자)81구조적 바인딩(structured binding)138로우 레벨 숫자 변환 "}">#include 140std::string_view클래스298weak_ptr도 shared_ptr와 마찬가지로 C스타일 배열을 지원한다.299weak_from_this()390static 데이터 멤버를 inline으로 선언할 수 있다.530std::as_const() 헬퍼 메서드 "}">#include (obj)..
![[C++] Map의 Key로 Class/Struct 넣기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkBZMZ%2FbtsBGUxcfrd%2FAFwaBlIb4QavgYsvkqXvT0%2Fimg.png)
오늘은 "호랭이아인교" 병아리 블로그를 운영하는 김드스님의 포스팅을 훔쳐왔다 !! 똑같이 포스팅 해도 된다고 허락을 받았기 때문에 출처를 밝히고 거의 80% 같은 내용을 포스팅한다. 고마워요 김드스님 ~ ** Map의 Key 값으로 Class/Struct 넣기 ** 🎃목표 map의 key값으로 기본적인 데이터 타입(int, string, float, double...)이 아닌 우리가 직접 만든 타입(user defined type)을 넣어보자. 🎃특징 Map은 key(키)와 Value(값)이 쌍으로 이루어진 자료구조로 키를 통해 값에 접근 할 수 있도록 만들어져 있다. map은 key(키)의 중복을 허용하지 않고, value(값)의 중복은 허용한다. c++의 map은 레드블랙트리를 기반으로 구현이 되어있..

1. 인코딩(Encoding)란? 코드화(문자의 번호를 컴퓨터에서 표현하는 방법), 암호화를 의미하며 반대말은 디코딩(decoding)이다. 어떤 정보를 정해진 규칙에 따라 변환하는 것(en-code-ing)을 일컫는다. 2. 유니코드(Unicode)란? 유니코드는 전 세계의 모든 문자를 담아 세계공통 코드 집합을 만들어 모두가 이 집합으로 인해 언어를 구현하자는 의도로 만들어졌다. 간단히 말해, 유니코드(unicode)는 모든 문자에 index를 부여하는 것이다. ( index 참고: http://www.unicode.org/charts/) ※ 한글과 같이 모음, 자음, 초성, 중성의 조합으로 여러가지 글자를 표현할 수 있는 언어는 index로 모두 줄 수 없다. 그래서 유니코드는 완전한 글자를 제공해..