본문 바로가기

전체 글

(308)
[C++] 맵(map) 맵은 키와 값의 쌍을 관리한다. 맵도 키를 정렬 및 검색의 기준으로 사용한다. 맵은 []연산자를 이용해서 요소를 삽입할 수도 있다. 맵이름[key] = value; 로 key와 value를 pair로 만들어서 삽입할 수 있다. 이 연산자는 멀티맵에는 사용할 수 없는데 키 값이 중복되어 어떤 것을 가리키는 지 모호하기 때문이다. 읽기 위해서 맵이름[key] 만 써도 (key,0)인 pair가 삽입되므로 주의해야 한다. (삽입때만 쓰는게 좋음) 셋과 같이 Key는 수정할 수 없으며 Value는 it->second = ?? 로 직접 수정할 수 있다. 맵의 가장 큰 장점은 빠른 검색 속도이다. 키를 삽입할 때마다 정렬된 위치를 찾아서 삽입해야 하므로 삽입 속도는 느리지만 이분 검색을 이용하기 때문에 검색 속도는..
[C++] 셋(set) 셋은 키(key)를 저장하며 값은 저장하지 않는다. 셋은 자동으로 데이터를 오름차순으로 정렬하기 때문에 정렬함수는 따로 없고 삽입할 때도 위치를 지정하지 않는다. 그리고 그냥 셋은 중복 키를 허용하지 않으며 멀티셋에서 중복 키를 허용한다. set와 같이 두번째 인수를 함수 객체로 지정할 수 있다. 그래서 set을 정렬을 위해 비교가 필요할 때 마다 함수 객체의 ()연산자를 호출해서 비교한다. set이 사용하는 디폴트 함수 객체는 less 인데 < 연산자를 사용한다. 셋은 ==연산을 요구하지 않고 < 연산자로 이분 검색을 한다. (함수객체가 less일 경우) 동일한 것은 두 값이 완전히 같은 것, 객체일 경우 모든 멤버까지 같은 것으로, ==연산자를 이용한다. 동등한 것은 두 값이 같은 것으로 인정되는 것..
[C++] 반복자 반복자는 컨테이너의 한 지점을 가리키는 객체이다. 반복자를 이용하면 알고리즘의 내부 코드에서 어떤 컨테이너이든지 상관없이 컨테이너의 요소에 접근할 수 있다. 반복자는 기능 별로 종류가 있다. 입력 반복자(InIt) 입력 반복자는 반복자가 가리키는 위치의 요소를 읽는 것만 가능하다. a=*it; // 가능 *it=a; // 불가능 출력 반복자(OutIt) 요소의 내용을 변경할 수 있는 반복자이며 보통 읽기도 가능하지만 필수는 아니다. *it=a; // 가능 a=*it; // 꼭 필요치 않음. 순방향 반복자(FwdIt) 입력, 출력이 모두 가능하고 ++it, it++를 통해 순방향으로 이동 가능하다. 양방향 반복자(BiIt) 순방향뿐만 아니라 --연산자로 역방향으로도 이동이 가능하다. 임의 접근 반복자(Ra..
[C++] 함수 객체 함수에게 더 구체적인 처리 방식을 지정하기 위해 함수 객체를 전달할 수 있다. 함수 객체는 함수 호출 연산자인 ()을 오버로딩한 객체이다. struct print{ void operator()(int a)const{ cout
[백준] 18258번 - 큐 기본 #include using namespace std; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int cases; cin >> cases; int* queue; int size = 0; int head = 0, tail = 0; queue = new int[cases];//case 만큼의 큐 만듦 for (int i = 0; i > command; if (command == "push") { int data; cin >> data; if (head != (tail ..
[백준] 10828번 - 스택 기본 #include using namespace std; int main() { int cases; cin >> cases; int* stack; int size = 0; int top = -1; stack = new int[cases];//case 만큼의 스택 만듦 for (int i = 0; i > command; if (command == "push") { int data; cin >> data; if (++top < cases) { stack[top] = data; size++; } } else if (command == "pop") { if (s..
[C++] auto_ptr string 객체는 문자열을 저장하기 위해 버퍼를 동적으로 할당해서 관리하는데 이 메모리는 자동으로 회수된다. 그러나 파괴자는 동적으로 할당한 메모리에 대해서는 책임을 지지 않는다. using namespace std; void main() { double *rate; rate=new double; *rate=3.1415; cout
[C++] 네임 스페이스 namespace 이름 { 여기에 변수나 함수를 선언한다. } 네임스페이스는 명칭이 중복되는 것을 방지하기 위해 명칭이 기억되는 영역이다. int i; // 전역 네임 스페이스 소속 namespace A { int i; // A 소속 } namespace B { int i; // B 소속 } void func() { int i; i=1; // 지역변수 i ::i=2; // 전역 네임 스페이스의 i A::i=3; // A 네임 스페이스의 i B::i=4; // B 네임 스페이스의 i } void main() { func(); } 네임 스페이스 작성 규칙 ①네임 스페이스는 다른 네임스페이스와 변수, 함수와 다른 이름을 가져야 한다. ②네임 스페이스는 전역 영역에 선언되어야 한다. ③네임 스페이스는 중첩해서 ..