모던C++

벡터의 for loop 일반적으로 for loop문을 돌리는 방법에는 3가지가 있다. 1. Index 2. Iterator 3. Ranged based for loop (C++ 11) 이 세가지 방법 중에서 Iterator와 Ranged based for loop는 비슷한 구조로 돌아간다. 결론부터 말하면 ranged based for loop이 가장 안전하고 표준의 방법이다. 하지만 for loop 안에서 Index 정보가 필요하다면 Index를 사용한 for loop문을 사용해야 하는 경우도 있다. 예제 "how many elements?" 가 출력된 후에 입력을 받고, 입력을 받으면 입력된 수 n 개의 숫자 1이 들어가 있는 벡터를 만들어 주었다. 각 elelment에 2를 곱해주는 Index 베이..
vector 오브젝트의 size와 capacity, 그리고 reserve 메소드 이전 게시글에서 벡터의 시간 복잡도 Time complexity에 대하여 다뤘다. 벡터의 마지막에 삽입/제거할 경우에는 O(1) 의 Time Complexity를 가진다고 이야기했다. 하지만 이런 O(1)의 시간 복잡도는 항상 보장되는 것이 아니다. 실제로는 가끔 O(n) 의 시간 복잡도를 가지게 된다. 예시를 통해 간단히 살펴보면, #include #include int main() { std::vector nums; std::cout
emplace_back() 사용하세요 c++ 벡터를 사용해 왔던 개발자 지망생들이라면 push_back() 을 많이 사용해 왔을 것이다. 결론부터 말하자면 그냥 모든 경우에서 emplace_back()을 사용하는 것이 좋다. 이름과 나이를 가지고 있는 고양이 클래스를 정의하고, 고양이 array를 가지고 있는 cats 를 만들어 보자. #include #include class Cat { public: Cat(std::string name, int age) :mName{ std::move(name) }, mAge{ age }{}; void speak() const { std::cout
연속적인 메모리 공간을 heap에 가질 수 있는 벡터 컨테이너에 대해 조금 더 알아보자. Cppreference에서 vector를 검색해보면 time complexity에 대한 내용이 나온다. https://en.cppreference.com/w/cpp/container/vector std::vector - cppreference.com template class vector; (1) (2) (since C++17) 1) std::vector is a sequence container that encapsulates dynamic size arrays. The elements are stored contiguously, wh..
벡터란? : std::vector is a sequence container that encapsulates dynamic size arrays. 벡터는 연속적인 컨테이너인데 dynamic size array를 캡슐화 한 것 이란 뜻이다. Dynamic size array를 벡터를 사용하지 않고 만드는 법은 cpp를 어느정도 공부했다면 알고 있을 것이다. int main() { int* numsPtr = new int[5]; for (int i = 0; i < 5; i++) { numsPtr[i] = i; } delete numsPtr; }; 이렇게 int형 포인터를 만들고 for문을 통해 숫자를 넣어주고 delete를 통해 할당 해제해주면 된다. 그림으로 보면, 스택 위에 numsptr이란 포인터가 만..
C++에서 함수형 프로그래밍을 지원하기 시작한 배경 C++ 언어의 스타일은 OOP, 즉 객체 중심 언어이다. 그런데 시간이 지나며 새로운 언어들이 생기고, 그런 새 언어들이 C++보다 더 쉽게 높은 언어 수준, 더 쉽게 OOP를 지원해주고 있다. 자연스럽게 C++는 OOP와 함께 높은 퍼포먼스가 필요한 곳에서 사용되어 왔다. 높은 퍼포먼스가 중요해지면 컴퓨터 구조상 자연스럽게 cach hit 을 계속 쳐줘야 한다. cache hit을 계속적으로 쳐주기 위해서는 data가 중심이 되는 data oriented programming 스타일이 자연스럽게 C++로 들어오게 되고, 자연스럽게 C++11부터 함수형 프로그래밍의 핵심 기능인 람다식 Lamda Expression을 지원해주기 시작했다. 그러면서 C++..
템플릿이란? : 변수에 타입을 정해주지 않고, 필요한 타입을 컴파일 시간에 정의해서 사용하는 개념. 비유적인 설명, (타 홈페이지에 잘 설명된 부분이 있어 인용) 개인적으로 비유를 들자면 펜중에.. 5색펜 이런거 있잖아요. 펜이 한자루 인데. 여러가지 색(자료형)을 우리가 그때그때 쓸 수 있잖아요. template는 여러개의 색(자료형)을 모아놓은 하나의 펜 케이스 그때그때 다른 색(자료형)을 눌러서 사용할 수 있다. 일반 자료형들이 [왼쪽] 펜들 이라고 생각한다면 -> [오른쪽]에 있는 펜 통! 이 Template 라고 생각하면 이해가 쏙쏙 ? 우리는 그때 그떄 필요할때마다. 각 색(int, double, string 등)을 넣어서 쓰면 됩니다. 출처: https://blockdmask.tistory...
결론: 사용하지 마세요 Dynamic Cast: RTTI (RunTime Type Information) 을 사용하는 것인데 대부분의 C++ 프로젝트에선 사용을 금지하고 있다. 구글 C++ 스타일 가이드의 RTTI 파트를 보면, Avoid using Run Time Type Information 부분에서 Dynamic Cast를 사용하지 말 것을 주문하고 있다. 이 접근 자체가 클래스 구조를 잘못 짠 것이고, 이런 RTTI가 없는 코드가 유지보수가 쉬운 코드라는 것이다. https://google.github.io/styleguide/cppguide.html Google C++ Style Guide Google C++ Style Guide Background C++ is one of the main de..
HeadlessCreator
'모던C++' 카테고리의 글 목록