C++ 기본 정리(1)

kimseyoung·2023년 11월 6일
0

C, C++

목록 보기
5/6

lvalue, rvalue

l(left)value는 왼쪽에 정의 되며 추후 다시 사용될 수 있는 변수
r(right)value는 오른쪽에 정의되며 한번쓰고 다시 사용하지 않는 변수

EX

string a = "test";

a >> lvalue
"test" >> rvalue

typedef

typedef는 타입의 이름을 새로이 별칭으로 정의할 수 있다.

typedef <type> <alias>

EX

typedef int i;
int main()
{
	i a = 1;
    cout << a << '\n';
    return 0;
}

STL(Standard Template Library)

C++ 에서 제공하는 표준 자료구조, 함수 라이브러리를 의미한다.

  • Algorithm
    정렬, 탐색 등에 관한 함수로 이루어져 있다. sort()가 대표적이다.

  • Container
    컨테이너는 여러가지 의미로 사용된다. C++에서는 자료구조를 의미한다.

  1. Sequence Container(시퀀스 컨테이너)
    시퀀스 컨테이너는 데이터를 단순히 저장해 놓는 자료구조를 뜻한다. array, vector, deque, forward_list, list 가 있다.

  2. Associative Container(연관 컨테이너)
    연관 컨테이너는 자료가 저장됨에 따라 자동정렬되는 자료구조를 말한다. 중복키가 가능한 것은 이름에 'multi'가 붙는다. set, map, multiset, multimap 등이 있다.

  3. Unordered Associative Container(정렬되지 않은 연관 컨테이너)
    정렬되지 않은 연관 컨테이너는 자료가 저장됨에 따라 자동정렬이 되지 않는 자료구조를 의미한다.
    unordered_set, unordered_map, unordered_multiset, unordered_multimap이 있다.

  4. Container Adapter(컨테이너 어댑터)
    컨테이너 어댑터는 시퀀스 컨테이너를 이용해 만든 자료구조를 뜻한다.
    대표적으로, stack, queue 는 deque를 이용해 만들었고, priority_queue는 vector를 이용해 힙 자료구조로 만든다.

  • Iterator(반복자)

반복자는 포인터와 비슷한 객체로, 컨테이너에 저장되어 있는 모든 원소들을 전체적으로 흝어 나갈 때 사용하는 포인터라고 생각할 수 있다. 여러 종류가 존재한다.

Iterator TypeUsageReadAccessWriteIncrease & DecreaseComparison
Input Iterator(입력 반복자)istream_iterator=*p->++== !=
Output Iterator(출력 반복자)ostream_iterator inserter front_inserter back_inserter*p=++
Forward Iterator(순방향 반복자)=*p->*p=++== !=
Bidirectional Iterator(양방향 반복자)list set multiset map multimap=*p->*p=++ --== !=
Random Access Iterator(임의접근 반복자)일반 포인터 vector deque=*p-> []*p=++ -- + - += -=== != <> <= >=
  • Functor(펑터)
    함수 객체의 일종, 함수처럼 ()연산자와 함께 사용할 수 있는 객체이다.
    () 연산자를 오버로딩 하여 객체들을 함수처럼 사용하는 것을 허용한다.
    일반 함수의 이름, 함수를 지시하는 포인터, ()연산자가 오버로딩된 클래스 객체 모두 펑터이다.
  1. 제네레이터(Generator)
    매개변수 없이 호출하는 함수

  2. 단항 함수(Unary Function)
    하나의 매개변수로 호출하는 함수

  3. 이항 함수(Binary Function)
    두 개의 매개변수로 호출하는 함수

profile
Back-end Developer, DevOps Engineer

0개의 댓글