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
연속적인 메모리 공간을 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이란 포인터가 만..
연산자 오버로딩이란? 오버로딩이란 기존 함수에 새로운 의미를 부여하거나, 파라미터를 추가하거나, 새로운 것을 만들어 낸다는 개념이다. 연산자 오버로딩은, 연산자도 하나의 함수처럼 생각하여 이를 오버로딩한다는 개념이다. 기존의 정의되어있는 데이터 타입을 우리가 만든 연산자에도 대해서 동작하게 하는 것이다. 즉, 연산자 오버로딩은 객체 지향 프로그래밍(OOP)에서 다른 연산자들이 함수 인자를 통해 구현되는 것을 말한다. 예를 들어, 덧셈 연산자는 정수가 들어올때도 동작하고, 실수가 들어올때도 동작하게 만들어져있다. 이러한 덧셈연산자를 우리가 정의한 데이터 타입에 대해서도 동작하게 하는것이 연산자 오버로딩 이다. 대부분의 연산자는 자식까지 상속이 된다. 결국, 기억해야 하는 것은 연산자 operator 는 그..
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++' 태그의 글 목록