목록cpp (20)
삶의 공유
C++로 개발을 하다 보면 컨테이너(vector, list 등) 안에 있는 특정 데이터를 찾아야 할 때가 수도 없이 많습니다. 이때 여러분은 어떻게 하시나요? 직접 for 문을 돌리시나요, 아니면 멤버 함수 find를 찾으시나요?오늘은 C++ 표준 라이브러리(STL)가 데이터를 검색하는 철학이 어떻게 변화해왔는지, 그리고 C++20에 도입된 Ranges가 어떻게 이 과정을 혁신적으로 바꿨는지 깊이 있게 알아보겠습니다.1. 컨테이너에 '검색' 기능을 넣는 두 가지 방법C++ STL 설계자들은 컨테이너에서 데이터를 찾는 기능을 제공하기 위해 깊은 고민을 했습니다. 여기에는 두 가지 접근 방식이 있습니다.방법 1: 멤버 함수로 제공하기 (s.find(3))장점: s.find(3)처럼 작성하면 되니 직관적이고 ..
C++ 프로그래밍을 하다 보면 수많은 데이터를 담는 '그릇(Container)'을 다루게 됩니다. 배열, 리스트, 벡터 등 종류도 다양하죠. 그런데 이 그릇들은 생긴 모양(메모리 구조)이 다 제각각입니다."메모리 구조가 다른데, 어떻게 똑같은 방식으로 데이터를 꺼낼 수 있을까?"이 난제를 해결하기 위해 등장한 것이 바로 **반복자(Iterator)**입니다. 오늘은 반복자의 원리부터, 이를 더욱 우아하게 만드는 C++20의 Ranges까지 깊이 있게 파헤쳐 보겠습니다.1. 반복자(Iterator): 포인터인 듯, 포인터 아닌 너가장 기본적인 자료구조인 배열(Array)과 연결 리스트(Linked List)를 비교해 봅시다.배열(Array): 메모리가 연속적으로 붙어 있습니다. 포인터에 ++ 연산을 하면 ..
C++로 개발을 하다 보면 데이터를 담는 그릇, 즉 '컨테이너'를 선택해야 하는 순간이 옵니다. 가장 기본인 C-Style 배열, 가장 많이 쓰는 std::vector, 그리고 모던 C++의 std::array까지. 이 셋은 비슷해 보이지만 메모리 구조와 성능에서 큰 차이가 있습니다.오늘은 이 세 가지의 차이점을 코드를 통해 뜯어보고, 상황에 맞는 최적의 선택이 무엇인지 알아보겠습니다.1. 코드 한 줄 한 줄 뜯어보기우선, 예시 코드를 통해 각 컨테이너가 어떻게 선언되고 사용되는지, 그리고 왜 에러가 발생하는지 자세히 살펴보겠습니다.C++ #include // std::vector를 사용하기 위한 헤더#include // std::array를 사용하기 위한 헤더int main(){ // 1. ..
출저 : 책, 전문가를 위한 C++ 메모리 공간을 적당히 할당하기만 하면 어떠한 값이라도 힙에 저장할 수 있다. 예를 들어 정수값을 힙에 저장하려면 정수 타입에 맞는 메모리 공간을 할당해야하는데 이때 다음과 같이 포인터를 선언해야 한다. int* myIntegerPointer; int 타입 뒤에 붙은 별표(*)는 이 변수가 정수 타입에 대한 메모리 공간을 가르킨다는 것을 의미한다. 이 때 포인터는 동적으로 할당된 힙 메모리를 가리키는 화살표와 같다. 아직 값을 할당 하지 않았기 때문에 포인터가 구체적으로 가리키는 대상은 없다. 이를 초기화 되지 않은 변수 라 부른다. 변수를 선언한 후에는 반드시 초기화 해야한다. 특히 포인터 변수는 초기화 하지 않으면 어느 메모리를 가르키는지 알수 없기 때문에 반드시 초..
출저 : 책, 전문가를 위한 C++ ① 반복문 컴퓨터는 같은 일을 계속 반복하는데 뛰어나다. 이를 위해 C++는 while, do.while,for, 범위기반 for 등 네가지 반복 메커니즘을 제공한다. ② while문 while문은 주어진 표현식이 true가 될 때 까지 일정한 코드 블록을 계속해서 반복한다. 다음 코드는 This is silly. 라는 문장을 다섯번 출력한다. #include int main() { int i = 0; while (i < 5) { std::cout
출저 : 책, 전문가를 위한 C++ 함수 규모가 어느 정도 큰 프로그램에서 코드를 모두 main()안에 담으면 관리하기 힘들어진다. 프로그램의 가독성을 높이려면 함수 단위로 간결하게 나눠서 작성해야 한다. C++에서 함수를 사용하려면 반드시 사용하려는 위치보다 앞에서 선언해야 한다. 특정한 파일 안에서만 사용할 함수는 선언과 구현(정의) 모두 소스 파일 안에 작성한다. 반면 함수를 다른 모듈이나 파일에서도 사용해야 한다면 그 함 수는 헤더 파일에 작성하고 구현은 소스파일에 작성한다. ※ 함수를 선언하는 문장을 함수 프로토타입 또는 함수 헤더라 부른다. 함수의 구체적인 내용은 보지 않고, 그 함수에 접근하는 방식만 표현한다는 의미가 강하다. 또한 함수의 리턴 타입을 제외한 함수 이름, 매개변수 목록을 함수..