deque deque (double-ended queue)는 양쪽 끝에서 요소를 추가하거나 제거할 수 있는 유연한 컨테이너이다. 이 컨테이너는 다양한 작업을 지원하며, 각각의 작업은 특정한 시간 복잡도를 가진다. push_front: deque의 시작 부분에 요소를 추가한다. 시간 복잡도는 일반적으로 상수 시간(O(1))이다. push_back: deque의 끝 부분에 요소를 추가한다. 이 작업 역시 상수 시간(O(1))이 소요된다. pop_back: deque의 끝 부분에서 요소를 제거한다. 상수 시간(O(1))이 걸린다. pop_front: deque의 시작 부분에서 요소를 제거한다. 이 작업도 상수 시간(O(1))이 소요된다. erase: deque 내의 특정 위치에 있는 요소를 제거한다. 시간 복..
std::forward_list는 C++ 표준 라이브러리의 일부로, 단방향 연결 리스트를 구현하고 있다. 각 원소는 다음 원소를 가리키는 포인터를 포함하며, 이 구조는 원소의 삽입과 삭제를 유연하게 만든다. 초기화 및 원소 셋팅 #include #include int main() { std::forward_list flist; // 빈 forward_list 생성 // 원소 삽입 flist.push_front(1); flist.push_front(2); flist.push_front(3); // 출력 for (int n : flist) { std::cout
std::array 자주 사용되는 자료 구조이지만, 주요 단점이 몇 가지 존재한다. 배열의 크기는 컴파일 시간에 결정되는 상수이다. 즉, 프로그램 실행 중에 변경할 수 없다. 크기가 고정되어 있어서 원소를 추가하거나 삭제할 수 없다. std::array의 메모리 할당 방법을 변경할 수 없다. 항상 스택 메모리를 사용한다. std::vector - 가변 크기 배열 vector는 C 스타일 배열 또는 std::array가 가지고 있는 가장 두드러지는 문제 중 하나인 '고정 크기' 문제를 해결한다. std::vector는 초기화 과정에 데이터의 크기를 제공하지 않아도 된다. 다음은 벡터를 초기화하는 몇 가지 방법이다. // 크기가 0인 벡터 선언 std::vector vec; // 지정한 초깃값으로 이뤄진 크..
후행 반환 타입(trailing return type)은 C++11에서 도입된 기능으로, 함수의 반환 타입을 함수 매개변수 목록 뒤에 명시하는 방법이다. 이는 함수 선언 시 반환 타입을 더 명확하게 표현하거나, 특히 템플릿 함수에서 반환 타입을 표현하기 어려운 경우에 유용하다. 구문 후행 반환 타입은 auto 키워드와 화살표 (->)를 사용하여 정의된다. 기본 형식은 다음과 같다: auto functionName(parameters) -> returnType; 여기서 functionName은 함수의 이름, parameters는 매개변수 목록, returnType은 반환 타입이다. 사용 예 후행 반환 타입은 특히 반환 타입이 매개변수에 의존하는 경우 유용하다. 예를 들어, 두 매개변수의 타입이 다를 때 그..
:: (범위 지정 연산자) - 기능: `::` 연산자는 클래스, 네임스페이스, 열거형 등의 특정 범위 내에서 멤버에 접근하는 데 사용되는 연산자이다. 이는 클래스의 정적 멤버, 네임스페이스의 멤버, 열거형의 멤버 등에 접근할 때 필요하다. - 사용 예시: `MyClass::myStaticMethod`라는 표현은 `MyClass`라는 클래스 내에 정의된 정적 메서드 `myStaticMethod`에 접근하는 것이다. 이와 유사하게, `::` 연산자는 전역 네임스페이스에 있는 함수나 변수에 접근할 때도 사용된다. 예를 들어, 전역 변수 `globalVar`에 접근하기 위해서는 `::globalVar`로 표현할 수 있다. - 특징: 이 연산자는 객체의 인스턴스가 아닌, 클래스 자체나 네임스페이스 같은 더 큰 범..
범용 참조는 주로 템플릿 함수에서 lvalue와 rvalue 참조를 모두 처리할 수 있는 유연성을 제공하기 위해 사용된다. 여기서 `Args&&`는 다음과 같은 특징을 가진다: 1. 타입 추론: `Args&&`는 컴파일러가 인자의 타입을 추론하도록 한다. 인자가 lvalue인지 rvalue인지에 따라 `Args`의 타입이 결정된다. 2. lvalue와 rvalue 처리: `Args&&`는 lvalue 참조와 rvalue 참조 모두를 처리할 수 있다. 이는 함수가 lvalue 참조 (예: 변수) 및 rvalue 참조 (예: 임시 객체)를 모두 효율적으로 처리할 수 있도록 해준다. 3. 완벽한 전달 (Perfect Forwarding): `Args&&`와 함께 `std::forward`를 사용하면 함수에 전..
가변 템플릿 인자는 템플릿 함수나 클래스가 임의의 수와 타입의 인자를 받을 수 있도록 한다. 여기서 `Args`는 가변 인자의 타입들을 나타내는 플레이스홀더 이름이며, 다른 이름으로 대체될 수 있다. 가변 템플릿 인자를 사용하는 방법은 다음과 같다: template void myFunction(Args ... args) { // args를 사용하는 코드 } 이 함수는 어떤 수와 타입의 인자든 받을 수 있다. 예를 들어, `myFunction(1, 2.5, "Hello")`와 같이 호출할 수 있다. template class MyClass { public: MyClass(Args ... args) { // args를 사용하는 생성자의 로직 } }; 이 클래스도 여러 타입과 수의 인자를 받을 수 있는 생성자..
T& at(int index) { if(index < n) { return data[n]; } throw "out of range"; } 와 T* begin() { return data; } const T* begin() const { return data;} T* end() { return data + n; }; const T* end() const { return data + n; } 의 차이점은 뭘까? 둘 다 동일하게 T* data의 인자를 반환하도록 생성할 이유라면, T& begin() { return data[0]; } 와 같이 쓰면 안되나? 찾아보니, 이는 사용 목적의 차이라고 한다. T& at(int index)`에서 참조 사용 1. 안전성과 직접 접근: `at` 함수는 컨테이너의 특정 요소..
C++에서 클래스 멤버 함수의 `const` 버전을 추가하는 경우는 주로 해당 함수가 객체의 상태를 변경하지 않음을 명시하고 싶을 때입니다. 이는 객체의 멤버 변수를 수정하지 않는 "읽기 전용" 함수를 나타내며, 이를 통해 코드의 의도를 더 명확하게 하고, 잠재적 오류를 줄일 수 있습니다. `const` 멤버 함수는 다음과 같은 상황에서 유용합니다: 1. 읽기 전용 접근 보장: `const` 함수는 객체의 멤버 변수를 변경할 수 없습니다. 이로 인해 객체의 상태를 변경하지 않고 정보를 읽거나 계산만 수행하는 함수를 명확하게 표현할 수 있습니다. 2. `const` 객체 사용: `const`로 선언된 객체는 오직 `const` 멤버 함수만 호출할 수 있습니다. 따라서, 객체가 변경되지 않아야 하는 상황에서..
C++에서 포인터 변수와 참조(reference)는 서로 다른 개념이며, 이 두 가지 방식은 변수에 접근하고 조작하는 방법에서 차이가 있다. 포인터 변수 (Pointer Variables) 1. 정의: 포인터는 변수의 메모리 주소를 저장하는 변수이다. 포인터는 그 자체로 주소를 가지며, 이를 통해 다른 변수의 위치를 가리킬 수 있다. 2. 사용법: - 선언: int* ptr; - 초기화: ptr = &variable; (변수 `variable`의 주소를 `ptr`에 할당) 3. *참조 (Dereferencing): *ptr 을 사용하면 `ptr`이 가리키는 주소에 있는 실제 데이터에 접근할 수 있다. 4. 특징: - 포인터는 `nullptr`로 초기화될 수 있으며, 이는 포인터가 어떠한 유효한 메모리 주..
- 정보보안기사 #실기 #정리
- Async
- javascript
- 파니노구스토
- 맛집
- Promise
- 인천 구월동 맛집
- react
- redux
- redux-thunk
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- AsyncStorage
- await
- react-native
- Total
- Today
- Yesterday