본문 바로가기

전체 보기157

Modern C++ : std::span (20) std::span 개요std::span은 연속된 메모리 영역을 참조하는 가볍고 안전한 래퍼 클래스입니다. C++20에서 도입되었으며, 배열이나 컨테이너의 요소들에 대한 뷰를 제공합니다. 포인터와 크기 쌍을 추상화하여 더 안전하고 표현력 있는 코드를 작성할 수 있게 해줍니다. C++ 버전별 주요 키워드 도입 시기C++20: std::span 도입 내용 설명std::span의 주요 특징:가벼운 참조 타입: std::span은 데이터를 소유하지 않고, 기존 데이터에 대한 뷰만 제공합니다.연속 메모리 컨테이너와 호환: std::vector, std::array, C-style 배열 등과 함께 사용할 수 있습니다.런타임 크기 정보: 배열의 크기를 런타임에 알 수 있습니다.범위 기반 for 루프 지원: 표준 컨테이.. 2025. 8. 23.
쿠팡 알바 : 야탑1캠프 세척2 두 번 다녀옴 세척2 (14:30 ~ 11:30) 다녀왔습니다. 세척은 세척기를 중심으로 일을 하는데 경험자 분들이 잘 알려주어 빠르게 적응 할 수 있었습니다. 과정은,프레쉬백 RT하차 - 세척기 뒤로 RT정렬 - 프레쉬백 세척기 투입 - 프레쉬백 조립 - 바코드 인식 - 빠레트에 프레쉬백 탑쌓기 - 랩핑 - 상차 준비 - 프레쉬백 상차 첫 날은 탑 쌓기와 랩핑!요령과 근력 그리고 지구력까지 필요한 작업입니다.처음 몇 번은 어색했는데 곧 적응하고 차곡차곡 쌓는 재미가 좋았습니다.특히 6단으로 쌓아 전체를 팽팽하게 랩핑하면 기분이 좋았습니다.그러나, 프레쉬백 5개를 한 뭉치로하여 반복해서 쌓아야해서 근지구력이 필요하고랩핑도 일정한 근력과 요령이 합쳐져서 근지구력이 필요했는데 빙글빙글 돌면서 작업하여초반에 숨을 헐떡이며 .. 2025. 8. 23.
Modern C++ : std::vector, emplace_back vs push_back (98, 11, 17) C++ vector의 emplace_back vs push_back 개요std::vector에서 emplace_back과 push_back은 모두 컨테이너의 끝에 요소를 추가하는 멤버 함수입니다. 이 두 함수는 비슷해 보이지만 내부 동작 방식에서 중요한 차이점이 있습니다. emplace_back은 C++11에서 도입된 기능으로, 불필요한 복사나 이동 연산을 피하고 직접 객체를 생성할 수 있게 해줍니다. C++ 버전별 주요 키워드 도입 시기C++98/03: push_back()만 사용 가능C++11: emplace_back() 도입, 완벽한 전달(perfect forwarding) 지원C++17: emplace_back()이 참조를 반환하도록 변경 내용 설명push_back의 동작 방식전달된 인자로 임시 .. 2025. 8. 22.
Modern C++ : std::vector (98, 11, 14, 17, 20) C++ std::vector 컨테이너 개요std::vector는 C++ 표준 라이브러리에서 제공하는 동적 배열 컨테이너로, 연속된 메모리 공간에 요소를 저장합니다. 자동으로 메모리를 관리하고 크기를 동적으로 조정할 수 있어 가장 널리 사용되는 컨테이너 중 하나입니다. 임의 접근이 가능하고, 끝에서의 삽입/삭제가 효율적입니다. C++ 버전별 주요 키워드 도입 시기C++98/03: 기본 std::vector 기능 도입C++11: 이동 생성자/대입 연산자, emplace_back(), shrink_to_fit()C++14: 일반화된 람다 캡처와 함께 사용 개선C++17: 구조적 바인딩과 함께 사용 개선, emplace_back()이 참조 반환C++20: std::span과의 호환성, std::ranges 지원.. 2025. 8. 21.
Modern C++ : template, std::span (20) C++ 템플릿과 std::span을 활용한 컨테이너 순회 개요C++ 템플릿은 다양한 데이터 타입에 대해 동작하는 일반화된 코드를 작성할 수 있게 해주는 강력한 기능입니다. std::span은 C++20에서 도입된 뷰(view) 타입으로, 연속된 메모리 영역을 안전하고 편리하게 다룰 수 있게 해줍니다. 이 두 기능을 조합하면 다양한 컨테이너 타입을 일관된 방식으로 처리할 수 있는 유연한 코드를 작성할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98/03: 기본 템플릿 지원 시작C++11: auto, 범위 기반 for 루프, std::array 도입C++14: 일반화된 람다 캡처, 변수 템플릿C++17: 클래스 템플릿 인수 추론(CTAD), std::string_viewC++20: std::sp.. 2025. 8. 20.
Modern C++ : perfect forwarding (11) C++ 완벽한 전달(Perfect Forwarding)출처https://jongwook.tistory.com/743 완벽한 전달: 문제이동 시맨틱과는 별개로 r-value 레퍼런스는 완벽한 전달(perfect forwarding) 문제를 해결하기 위해서 만들어졌습니다. 아래와 같은 간단한 팩토리 함수를 생각해 봅시다.templateshared_ptr factory(Arg arg){ return shared_ptr(new T(arg));}보시다시피 이 예제의 의도는 팩토리 함수의 인수로 주어진 arg를 T의 생성자로 전달하는 것입니다. arg의 입장에서 보면 마치 팩토리 함수가 존재하지 않았고 생성자를 상위에서 직접 호출한 것처럼 행동하는 것이 이상적이겠죠. 이것이 완벽한 전달입니다. 이 코드는 그것에 .. 2025. 8. 19.
Modern C++ : rvalue reference summary (11) C++ RValue Reference Summary 1. 기존 C++의 레퍼런스#include class MyClass{};int main(void){ MyClass a; MyClass& b = a; // b가 a를 참조하도록 한다.} 2. R-Value Reference의 등장C++11에서 R-Value Reference(&&)가 추가되어 R-Value 참조가 가능해졌습니다.#include class MyClass{};int main(void){ MyClass a; MyClass&& c = a; // R-Value Reference 사용} 3. L-Value와 R-Value의 기본 개념#include int main(void){ int d = 13; .. 2025. 8. 18.
쿠팡 알바 : 야탑1 Sub-FC HUB 일정이 맞지 않아 취소하다가 연휴중 시간이 맞아서 다녀왔습니다. 야탑5층 FC에는 쇼핑하듯 물품을 집어서 포장하는 일, 포장된 물품을 박스에 담는 일 (내가 한 일), 담은 박스를 보내고자 하는 컨베이어벨트로 옮기는 일 크게 3가지가 거대한 컨베이어벨트를 중심으로 분주하게 돌아갔습니다. 담당은 허브(HUB)컨베이어벨트로 오는 개별품을 보내고자하는 두 곳으로 분리하여 각 박스에 담고 다시 컨베이어벨트에 올려놓으면 됩니다. 내용은 간단합니다. 그 일이 있기 전까지... 처음에는 익숙하지 않아 양쪽에 박스를 놓아두고용,쓰라고 적힌 물품은 오른쪽에탑이라고 적힌 물품은 왼쪽에 넣고박스가 가득차면 컨베이어벨트에 올려놓습니다. 박스 높이를 컨베이어벨트와 같게 맞춰 놓아서 눈과 손만 적응하면 혼자서 천천히오는 물품을.. 2025. 8. 17.
Modern C++ : lvalue, rvalue, value category (98, 11) Lvalue, Rvalue, and C++ Value Category 1. 개요C++11의 핵심 기능인 Rvalue 참조(Rvalue references)와 이동 의미론(Move Semantics)을 이해하려면 Lvalue와 Rvalue의 개념을 명확히 알아야 합니다. 이 문서는 전통적인 Lvalue/Rvalue 개념부터 C++11 이후 확장된 값 카테고리(value categories)까지, 기존의 유용한 예제들을 바탕으로 종합적으로 설명합니다. 2. Lvalue와 Rvalue의 기본 개념가장 간단한 구분 기준은 "표현식의 주소를 안전하게 얻을 수 있는가?" 입니다.Lvalue (Locator Value): 식별 가능한(identifiable) 메모리 위치를 가지는 표현식입니다. 이름이 붙어 있거나, .. 2025. 8. 17.