C++/STL

    [C++] 셋(set),맵(map)

    [C++] 셋(set),맵(map)

    셋(set), 멀티셋(multiset), 맵(map), 멀티맵(multimap)은 이진 탐색 트리(BST)를 기반으로 하는 연관 컨테이너(associative container)입니다. (정확히 말하면 Red-black-tree. 스스로 균형을 맞추는 bst라고 생각) 따라서 vector,list,deque같은 시퀀스 컨테이너들과 비교했을때, 트리구조가 갖는 장점을 그대로 가져갑니다. 셋(set) 자동으로 정렬됨 중복된 원소 없음(중복된 원소를 허락하고 싶다면 multiset 사용) 데이터의 존재 유무를 판별할때 사용합니다. std::set s; //셋 정의 s.insert(10); //셋에 키값 추가 //셋에 해당 키가 있는지 확인하는 방법 auto itr = s.find(20); if (itr != ..

    [C++] 순열 구하기 (std::next_permutation, std::prev_permutation)

    해당 포스트를 참조했습니다. https://baebalja.tistory.com/14 모든 경우의 수 정렬 벡터를 정렬할 때 정렬 될 수 있는 모든 경우의 수를 물어보는 문제가 있다. 이러한 경우 해당 함수를 사용한다. 즉, A B C 를 정렬하고 싶은데 모든 경우를 정렬하면, ABC ACB BAC BCA CAB CBA 순으로 정 baebalja.tistory.com c++에서 순열(permutation)을 구해야 하는 경우가 있습니다. 특히 알고리즘 문제를 풀다 보면 자주 발생합니다. 헤더파일 #include 사용법 벡터의 경우 next_permutation(v.begin(), v.end()) prev_permutation(v.begin(), v.end()) 배열의 경우 int arr[n]; next_..

    [C++] 2개이상의 묶음으로 저장하기(std::tuple)

    std::pair의 확장판 느낌인 std::tuple입니다. 헤더파일 #include 선언 tuple t; 2개,3개,4개,5개... 등 원하는 만큼의 자료형을 묶을 수 있습니다. 값 생성(변경) tuple t = make_tuple(1,2,3.3,"hello"); make_tuple( )을 사용합니다. 값 얻기 cout

    [C++] 올림,내림,버림,반올림

    헤더파일 #include 올림(ceil) double ceil (double x); float ceil (float x); long double ceil (long double x); 사용 예시: cout

    [C++] 쌍으로 저장하기(std::pair)

    [C++] 쌍으로 저장하기(std::pair)

    template struct pair; std::pair는 위 코드에서 보는것 처럼 템플릿 구조체입니다. template 이랑 template 동일한 의미입니다. 현재는 typename을 쓰는것이 표준형식입니다. 호환성을 위해 과거에 사용하던 class로 표기법을 지원하고 있습니다. (둘의 차이에 대한 정리글 링크) (상세 레퍼런스보기: 링크) 헤더 파일 #include #include #include 결론적으론 std::pair는 위 헤더 3개중에 아무거나 include하셔도 됩니다. 사실 std::pair는 utility속에 들어있습니다. 그러나 algorithm과 vector헤더파일이 utility헤더를 포함하고 있기 때문에 셋 중 아무거나 include해도..

    [C++] STL의 반복자(iterator)

    반복자는 포인터와 비슷하지만, STL컨테이너에 대해 공통의 인터페이스를 제공합니다. 반복자를 이용한 연산은 어떤 컨테이너에서 정의된 반복자인지에 따라 결정됩니다. 임의 접근 / 순방향 반복자 (random access / forward iterator) 벡터와 배열은 연속된 자료 구조를 사용하기 때문에 특정 위치의 원소에 곧바로 접근할 수 있습니다. 이러한 반복자를 임의 접근 반복자(random access iterator)라고 합니다. 그러나 std::forward_list의 경우 기본적으로 역방향으로 이동하는 기능을 제공하지 않으며, 바로 이전 노드로 이동하려면 맨 처음 노드부터 시작해서 찾아가야 합니다. 따라서 std::forward_list는 증가 연산만 가능하며, 이러한 반복자를 순방향 반복자(..

    [C++] 아주 기본적인 연결 리스트(std::forward_list)

    C++는 C 스타일 배열에 대한 래퍼 클래스 std::array를 제공하듯이 기본적인 연결 리스트에 대한 래퍼 클래스인 std::forward_list 클래스를 제공합니다. std::forward_list 는 기본적인 연결 리스트의 성능을 유지하면서 추가적인 기능을 제공합니다. 성능 유지를 위해 std::forward_list 는 전체 리스트의 크기를 반환하거나 또는 첫 번째 원소를 제외한 나머지 원소에 직접 접근하는 기능을 제공하지는 않습니다. 즉, 맨 처음 원소에 접근하는 front()함수를 제공하지만, 반대 방향의 원소로 이동하는 back()같은 함수는 제공하지 않습니다. 원소의 삽입, 삭제, 순서 뒤집기, 분할을 위한 기능은 제공합니다. 이러한 기능은 기본적인 연결 리스트의 메모리 사용량이나 성능..

    [C++] 메모리 복사(memcpy와 std::copy)

    (출처: https://dbstndi6316.tistory.com/282 ) 1. memcpy 메모리를 조작하는 함수로는 대표적으로 memset, memcpy, memmove, memcmp 등이 있다. 그 중 memcpy는 메모리를 다른영역으로 복사하는 함수이다. 헤더파일: C : C++ : 기본 사용 : void* memcpy (void* dest, const void* source, size_t num) dest : 복사받을 곳을 가리키는 포인터 source : 복사할 메모리를 가리키는 포인터 num : 복사할 데이터의 길이 (바이트 단위) - 배열 복사 #include int src[10][10]={0,}; int dist[10][10]={0,}; int main(){ src[1][1]=10; me..