본문 바로가기

My Cosmos

set 함수 set 함수 생성, 복사, 소멸 동작 효과 set c 아무런 원소 없이 빈 set/multiset을 생성한다. set c(op) 아무런 원소 없이 빈 set/multiset을 생성한다. 정렬 기준은 op를 사용한다. set c1(c2) 같은 타입으로 생성된 다른 set/multiset을 생성한다. set c(beg, end) (beg, end)의 범위로 초기화하여 set/multiset을 생성한다. set c(beg, end, op) (beg, end)의 범위로 초기화하여 set/multiset을 생성한다. 정렬 기준은 op를 사용한다. c.~set() 모든 원소들을 파괴하고 메모리를 해제한다. 수정하지 않는 동작들 동작 효과 c.size() 실제 원소의 개수를 반환한다. c.empty() 컨테이너가 비.. 더보기
list 함수 list 함수 생성, 복사, 소멸 동작 효과 list c 원소 없이 빈 vector를 생성한다. list c1(c2) 같은 타입의 다른 vector를 복사하여 생성한다.(모든 원소들은 복사된다) list c(n) 디폴트 생성자에 의해서 생성되는 n개의 원소와 함께 vector를 생성한다. list c(n, elem) elem 원소의 n개의 복사본으로 vector를 초기화하여 생성한다. list c(beg, end) [beg, end] 범위의 원소로 vector를 초기화하여 생성한다. c.~list() 모든 원소들을 파괴하고 메모리를 해제한다. 수정하지 않는 동작들 동작 효과 c.size() 실제 원소의 개수를 반환한다. c.empty() 컨테이너가 비어 있는지를 판단한다.(size() == 0 보다 빠르.. 더보기
vector 함수 vector 함수 생성, 복사, 소멸 동작 효과 vector c 원소 없이 빈 vector를 생성한다. vector c1(c2) 같은 타입의 다른 vector를 복사하여 생성한다.(모든 원소들은 복사된다) vector c(n) 디폴트 생성자에 의해서 생성되는 n개의 원소와 함께 vector를 생성한다. vector c(n, elem) elem 원소의 n개의 복사본으로 vector를 초기화하여 생성한다. vector c(beg, end) [beg, end] 범위의 원소로 vector를 초기화하여 생성한다. c.~vector() 모든 원소들을 파괴하고 메모리를 해제한다. 수정하지 않는 동작들 동작 효과 c.size() 실제 원소의 개수를 반환한다. c.empty() 컨테이너가 비어 있는지를 판단한다.(siz.. 더보기
반복자(iterator) 반복자(iterator) 포인터의 일반화라고하며 반복자는 포인터를 그대로 흉내내어 임의의 컨테이너에 저장된 모든 요소를 순서대로 가리킬 수 있다. 반복자의 목적은 컨테이너 내부 순회에 있다. 1. 컨테이너의 요소 하나를 가리키는 기본적인 역할을 한다. 2. 가리키는 지점의 요소를 읽고 쓸 수 있다. 내용을 읽는 * 연산자가 정의된다. 3. 증감에 의해 주변 요소로 이동할 수 있다. ++, -- 등의 연산자가 정의된다. 4. 반복자끼리 대입, 비교 가능해야 한다. 대입, 비교 연산자가 정의된다. 컨테이너에 대해 어떤 작업을 하고 싶다면 컨테이너에 저장되어 있는 요소에 접근해야 하므로 순회가 꼭 필요하다. 반복자 카테고리 기능 제공자 입력 반복자 전방향 읽기 istream 출력 반복자 전방향 쓰기 ostre.. 더보기
컨테이너(Container) 컨테이너(Container) 컨테이너를 뜻 그대로 직영하면 통, 그릇이다. 쌀통에 쌀을 담고 술통에 술을 저장하듯이 컨테이너는 무엇인가를 저장하는 것이다. STL의 컨테이너는 타입이 같은, 즉 동질적인 객체의 집합을 저장하고 관리하는 역할을 한다. 다른 말로 컬렉션(Collection)이라고도 부른다. STL의 컨테이너는 자료를 저장하는 방식과, 삽입, 정렬, 삭제하는 관리 방식에 따라 크게 세 가지 부류로 구분된다. 시퀀스 컨테이너(Sequence Container) 자료의 선형적이거나 순차적인 집합이며 자료를 저장하는 기본 임무에 충실한 가장 일반적인 컨테이너이다. 삽입된 자료를 무조건 저장하며 입력되는 자료에 특별한 제약이나 관리 규칙은 없다. 임의의 위치에 요소를 마음대로 삽입, 삭제할 수 있다... 더보기
STL - Standard Template Library STL - standard Template Library 일반화의 개념에 의해 자주 사용되는 자료구조와 알고리즘을 제공하는 라이브러리가 바로 STL이다. 템플릿의 집합을 제공하는 라이브러리이며 현재 C++의 표준으로 채택되어 있다. 1979년경 알렉산더 스테파노프(Alexander Stepanov)한 사람에 의해 창안되었다. 이 시기는 스트로스트룹이 C++의 초기 디자인을 한 시점과 거의 일치한다. C++과 STL은 최초 따로 탄생했고 각자의 길을 걸어가다가 90년대중반에 비로소 하나로 통합되었다. 스테파노프는 최초 Ada로 STL의 원형을 작성하였는데 Ada는 일반화 프로그래밍을 위한 적절한 특징들을 많이 가지고 있었다. 그러나 Ada 자체가 대중의 인기를 얻지 못하고 C++이라는 더 적합한 언어가 발.. 더보기
얕은 복사, 깊은 복사 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) 얕은 복사와 깊은 복사는 복사 생성자, 대입 연산자와 관련이 있다. 객체 간에 대입이나 복사에서 일어나는 일이기때문이다. 먼저 얕은 복사에대해 설명하면 얕은 복사는 일반적인 값의 복사를 말한다. 클래스에서 기본적으로 제공하는 복사 생성자와 대입 연산자에서 발생하는 현상이다. 기본적으로 제공하는 복사생성자를 사용하는 클래스를 작성하였다. 문제 없이 출력이 되는 것을 확인할 수 있다. test2의 생성과 동시에 test1을 대입하여 복사생성자를 호출하였다.(선언과 동시에 대입하여 초기화하는 경우 복사생성자 호출. 이부분은 나중에 다시 글에 올리겠다.) 이 경우 런타임 오류가 발생한다. test1의 m_c와 test2의 m_c가 같은 객체를 .. 더보기
추상 자료형(ADT) 추상 자료형(Abstract Data Type) 지갑을 예로 들어보겠다. 지갑에 대한 추상 자료형을 추출해보자. 먼저 단순히 지갑을 가지고 하는 행동들에 대해서만 생각해보면 된다. - 카드의 삽입 - 카드의 추출 - 동전의 삽입 - 동전의 추출 - 지폐의 삽입 - 지폐의 추출 중간에 다른 과정은 생각하지 않고 가장 대표적이고 단순한 행동들만 적어보았다. 위에 지갑의 기능들이 나열되어있다. 하지만 어떠한 과정을 거쳐서 기능들이 완성되는지는 언급하지 않고 있다. 만약 동전의 삽입의 경우 '지갑을 열고 동전 주머니를 찾아서 동전 주머니의 지퍼를 내린다. 그리고 동전 주머니에 동전을 넣는다. 이어서 동전 주머니의 지퍼를 올린 다음 마지막으로 지갑을 닫는다.' 우리에게 너무나도 익숙한 것이 지갑이라 별도의 과정이.. 더보기
Console 출처 - http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx AddConsoleAlias 지정된 실행 파일 콘솔 별칭을 정의한다. BOOL WINAPI AddConsoleAlias(LPCTSTR Source, LPCTSTR Target, LPCTSTR ExeName); Source - Target에 붙일 별칭. Target - Source의 별칭이 붙을 대상. NULL인 경우. 해당 콘솔 별명을 제거한다. ExeName - 콘솔 별칭을 정의할 실행파일 이름. 반환 값은 성공 시 TRUE, 실패 시 FALSE 이며, GetLastError를 통해 오류 정보를 알 수 있다. Alloc Console 호출 프로세스를 위한.. 더보기
const의 선언 위치 const 선언 위치 1) const int *p1; 여기서 const의 의미는 포인터 p1이 가리키는 변수의 값을 바꾸지 않겠다는 의미이다. p1이 가리키는 대상은 얼마든지 바꿀 수 있다. 다만 주소를 통한 참조로 값을 바꿀 수는 없다. 그렇기때문에 17번째 줄에서 오류가 발생한다. 2) int const *p2; 이 경우도 위에 1)과 같은 의미가 된다. 위에 코드를 보면 알겠지만 같은 동작에서 같은 오류가 발생하고있다. const int *p == int const *p 3) int * const p3; 여기서 const의 의미는 const int a = 0;처럼 해당 변수를 상수화 시키는 것으로 이 포인터 p3가 한번 가리킨 대상을 절대 바꾸지 않겠다는 뜻이다. 대신 가리킨 대상을 주소를 통해 참.. 더보기