*지*
Bronze개인인증
팔로워0 팔로우
소개
등록된 소개글이 없습니다.
전문분야 등록된 전문분야가 없습니다.
판매자 정보
학교정보
입력된 정보가 없습니다.
직장정보
입력된 정보가 없습니다.
자격증
  • 입력된 정보가 없습니다.
판매지수
전체자료 20
검색어 입력폼
  • [공학]커널 동기화
    Understanding the LINUX KERNEL Kernel SynchronizationTable of ContentsHow the Kernel Services Requests Synchronization Primitives Synchronizing Accesses to Kernel Data Structures Examples of Race Condition PreventionIntroduction커널 어떤 요청에 응답하는 일종의 서버 요청이 겹쳐서 실행 될 수 있기 때문에 race condition이 발생 할 수 있음  동기화 기법으로 해결 언제, 얼마나 많은 커널 요청이 서로 겹쳐서 발생하는가? 커널에서 구현하는 기본적인 동기화 기법은 무엇인가? 일반적으로 적용하는 방법은 무엇인가?How the Kernel Services RequestsBossWaiter1:call2:service1customerWaiterBoss1:service2:call3:stop4:service2WaiterBoss 11:service2:call3:stop4:serviceBoss 25:finish6:service3BossWaitercustomercustomer1:service2:last request3:chioce4:drop4:pick up4Kernel PreemptionEvent 발생시 기존에 동작 중이던 task를 운영체제가 강제적으로 중지하는 것 2.6 커널에서의 선점 이전 버전에서는 task가 CPU를 스스로 포기하지 않는 한 커널 모드에서는 task 실행을 선점할 수 없었음 2.6 커널 버전 부터 선점 가능  커널 task는 선점 될 수 있고 몇몇 중요한 사용자 애플리케이션 실행 지속 가능 어떤 프로세스가 무한 루프에 빠지게 된다면? Nonpreemption 프로세스를 선점할 수 없으므로 무한루프 프로세스가 CPU를 계속 점유하게 되어 다른 프로세스 실행 불가능  forced process switch Preemption 어떤 프로세스가 무한루프에 빠지더라도 커널산 코드 앞에 lock 바이트 접두어가 붙은 read-modify-write 어셈블리 명령어는 멀티 프로세서 시스템에서도 원자적 제어 유닛이 같은 명령을 여러 번 반복할 수 있는 rep 바이트 접두어가 연산 코드 앞에 붙은 어셈블리 명령어는 원자적이지 않음 atomic_t타입과 atomic_t변수를 가지고 동작하고 원자적인 어셈블리 명령어 하나로 구현하는 함수 제공Optimization and Memory Barriers재배치를 통한 프로그램 실행 속도 향상 방법 컴파일러 최적화 방식으로 어셈블리 명령어의 순서 바꿈 멀티프로세서 환경에서의 메모리 접근 순서 바꿈 기초 함수의 특성 작업을 시작하기 전에 이전에 있는 작업을 끝마치게 함 어떤 어셈블리 명령어도 통과할 수 없는 방화벽과 비슷함 80x86 프로세서의 직렬화 되는 명령어 입출력 포트에 동작하는 명령어 Lock 접두어가 붙은 모든 명령어 제어 레지스터나 시스템 레지스터, 디버그 레지스터에 쓰기를 하는 명령어 lfence, sfence, mfence 어셈블리 명령어 몇가지 특별한 어셈블리 명령어 (ex : iret)Spin Locks (1)Locking 광범위하게 사용하는 동기화 기법 Lock을 획득해야 할 때 Kernel control path에서 공유 자료 구조에 접근 임계영역에 들어갈 때 멀티 프로세싱 환경에서 동작하도록 고안 명령어 루프 “busy wait” Spin lock을 기다리는 kernel control path는 시간을 버리는 것 외에 할 일이 없을 때에도 CPU에서 실행을 계속 함 CPU를 해제했다가 나중에 CPU를 다시 획득하는 것이 시간을 더 소비함Spin Locks (2)The spin_lock macro with kernel preemption 1. 커널 선점을 금지시키는 preempt_disable() 호출 2. slock 필드의 원자적 test-and-set 명령어인 _raw_spin_trylock()를 호출 3. kernel control path가 spin lock을 획득 분기Seqlocks커널 2.6부터 도입된 read/write spin locks과 비슷한 형태 Good : writer은 결코 대기상태가 없음 Bad : reader가 때때로 같은 데이터를 강제적으로 읽는 것 Sequenec counter 사용 0에서 시작하여 lock를 잠그면 홀수가 되고 lock를 풀면 짝수가 됨 모든 데이터 구조는 seqlock에 의해 보호할 수 있음 보호되는 데이터 구조는 writer에 의해 변형되고 reader에 의해 역참조된 포인터를 포함하지 않음 Reader의 임계영역에서의 코드는 side effect를 가지고 있지 않음unsigned int seq; do { seq = read_seqbegin( seqlock); // seqlock의 sequence number 반환 /*…..CRITICAL REGION …….*/ } while {read_seqretry( seqlock, seq));Read-Copy Update (RCU)많은 reader와 writer가 동시에 실행되는 것을 허락함 모든 CPU의 lock 또는 counter 공유를 사용하지 않음 Read/write spin locks와 seqlock에 비하여 장점이 됨 한계 범위 RCU에 의해 보호될 수 있는 포인터에 의해 동적으로 배분하고 참조됨 RCU에 의해 보호된 임계영역 안에서는 sleep할 수 있는 kernel control path는 없음 데이터 구조의 오래된 copy는 writer updates에 대해 자유로울 수 없음 Quiescent state (정지된 상태) CPU가 프로세스 전환이 발생할 경우 CPU가 사용자 모드에서 시작될 경우 CPU가 idle loop를 실행할 경우Semaphores (1)자원이 사용할 수 있게 될 때까지 잠들게 하는 기법 리눅스에서 제공하는 semaphores의 종류 Kernel control path에서 사용하는 kernel semaphores 사용자 모드 프로세스가 사용하는 시스템 V IPC semaphore (Chaper 19) S sleepers = 1) count 0 일 경우 sleepers = 0 으로 하고 loop를 나감 (count = 0, sleeper = 0)Semaphores (6)down_trylock() Interrupt handler나 deferrable function에서 deadlock의 우려때문에 제공되는 함수 down_interruptible() 세마포어에 의해 블록 상태가 되더라도 프로세스가 시그널을 받아 down 동작을 포기할 수 있게 하므로 장치드라이버에 많이 사용 Semaphore의 구현이 복잡한 것은 상당 부분 실행 흐름의 핵심 부분에서 시간이 소요되는 명령어를 피하도록 노력한 결과Read/Write SemaphoresRead/write spin lock과 프로세스를 보류시킨다는 점을 제외하면 비슷 동시에 많은 kernel control path가 read/write lock을 읽기용으로 획득 가능 다른 read/write용으로 semaphores를 가지는 kernel control path 가 없을 경우 쓰기용 락 사용 가능 struct rw_semaphore count : 16bit 카운터 두개 저장 상위 16bit : 대기 중이 아닌 쓰려는 프로세스의 개수와 대기중인 커널 제어 경로 수의 합에 2의 보수 값 하위 16bit : 대기 중이 아닌 읽거나 쓰려는 프로세스의 전체 개수 wait_list : 대기 프로세스 리스트에 대한 포인터 wait_lock : 대기 큐 리스트와 rw_semaphore 보호를 위한 spin lockCompletionsSemaphore와 비슷한 동기화 기법 동시에 다른 프로세서에서 up()과 down()하는 경우의 방지를 위해 도입 complete() = up() done = 1 wake_up() 호출하여 배타적인 프로세스를 깨움 프로세스가 깨어나면 done을 0으로 설정 wait_for_completion() = down() done = 1 : 이미 complete()를 실행 했으므로 종료. done = 0 : currnd Interrupt Disabling (2)Protecting a data structure accessed by exceptions 시스템 콜 서비스 루틴 (Chatper 10) 프로세스 하나 이상에 할당할 수 있는 자원을 나타냄 Semaphore : uni-processor, multi-processor 동일하게 사용 Protecting a data structure accessed by interrupts 같은 interrupt handler는 둘 이상 동시에 실행될 수 없으므로 동기화 기법이 필요 없음 다른 여러 interrupt handler가 자료구조 접근 시, 또는 multi processor에서 서로 다른 여러 interrupt 동시 실행 시 동기화 필요 uni-processor system 모든 임계 구역에서 interrupt 금지 semaphore : 프로세스 블록으로 사용 불가능 spin lock : dead lock이 일어날 수 있음 multi-processor local interrupt disabling + read/write spin lock  한 interrupt handler가 사용하려는 spin lock이 잠긴 상태라도 결국 lock을 소유하는 다른 CPU에서 실행 중인 interrupt handler가 lock을 해제할 것이므로 시스템은 멈추지 않음Choosing Among Spin Locks, Semaphores, and Interrupt Disabling (3)Protecting a data structure accessed by deferrable functions uni-processor 직렬 수행으로 경쟁조건이 발생하지 않음 multi-processor Defferable functions 동시 실행으로 경쟁조건 발생Spin lockMany taskletsNoneOne taskletSpin lockSoftirqsProtectionDeferrable functions accessing the data structuhow}
    공학/기술| 2006.12.13| 38페이지| 1,000원| 조회(511)
    미리보기
  • [공학]주소 자동 설정
    Address Autoconfiguration in Mobile Ad Hoc NetworksContents2. Stateful Approaches1. Introduction5. Conclusion3. Stateless Approaches4. Hybrid ApproachesIntorductionMANET (Mobile Ad hoc Network) 중앙 집중 형태의 제어나 인프라 구조가 없는 독립적인 모바일 컴퓨팅 노드들 간의 집합 Address Autoconfiguration Stateless approaches Stateful approaches 중앙 집중형 주소 설정 서버 노드가 주소 pool을 관리하고 주소 설정에 대한 모든 권한을 갖음 서버 노드에 오버헤드 집중, 서버 노드와의 통신의 어려움 분산형 주소 설정 주소 pool을 관리하고 할당된 주소가 유일하다는 것을 보장하는데 어려움 네트워크 분리되거나 합쳐질 경우 해결방법이 복잡함Issues with Address Autoconfiguration in MANETsDifficulties of autoconfiguration in MANET Mobility, instability, low bandwidth and power resources MANET partitioning and merging Absence of central administration Address space Protocols for wired networks are not suitable DHCP assumes central server Possible scenariosPartition(c) Merger of two MANETs(a) A node joins and leavesMANETMANET BMANET A(b) MANET partitionsMisrouting due to network mergingABC123DE41Node addressActive routeNetwork ANetwork BMerged networkDE41ABC123Stateful Approaches주소정보를 유지하는 기법 Centralized maintenance of the allocation table 하나의 노드가 할당테이블을 가지고 있는 것 할당테이블을 가지는 노드는 항상 동적으로 선출되고 바뀜 Distributed maintenance of a common allocation table 모든 노드가 모든 주소가 있는 할당테이블을 가지고 있는 것 노드 간의 동기화를 통해 이중의 주소할당을 피함 Distributed maintenance of multiple disjoint allocation tables 모든 노드가 일부 주소가 있는 할당테이블을 가지고 있는 것 효과적이고 신뢰성 있는 동기화가 가장 중요함Protocols Utilizing a Centralized Allocation TableCentralized Autoconfiguration (CAC) 하나의 노드를 선출하여 그 노드가 할당 테이블을 관리하며 주소를 배졍하는 방법 IPv6를 기본으로 한 디자인 Address, Mac addresses, lifetimes Initiator Address agent 동적 선출 할당 테이블 유지 메시지 교환을 통한 주소 결정 address_confirm address_request 어떠한 패킷도 받지 않는다면 새로운 파티션을 취한 것임 새로운 Address agent 선출ADEBC1452?1 2 3 4 5 6 7 8Centralized maintenance of the allocation tableRequesterAllocation tableInitiatorProtocols Utilizing a Distributed Common Allocation TableMANETconf 이미 MANET에서 동작하는 노드가 새롭게 MANET에 참가하는 노드에게 주소를 할당하는 방법 Partition 해당 파티션에서 가장 낮은 주소를 지닌 노드가 임의로 생성한 식별자로 구별 Merge 처음 만나는 두 노드가 Allocated 리스트를 주고 받아 자신의 파티션에 Flooding 단점 높은 통신 오버헤드 주소 충돌 가능성 낮은 확장성ADEBC1452?1 2 3 4 5 6 7 81 2 3 4 5 6 7 81 2 3 4 5 6 7 81 2 3 4 5 6 7 8Distributed maintenance of a common allocation tableRequesterInitiatorProtocols Utilizing a Distributed Common Allocation TableBoleng's protocol 완전한 할당 테이블을 유지하지 않음 Highest address assigned Variable-sized addressing Overhead의 축소 New node join 인접한 노드의 주소를 가장 높은 주소로 간주 주소의 길이 증가 Merge 가까이에 위치한 두 개의 노드 파라미터 비교 Both partitions increase their address lengthProtocols Utilizing a Distributed Common Allocation TableProphet Allocation Protocol 상태 함수 f(n)을 이용하여 각 노드에 동일한 주소를 사용할 가능성을 줄이는 방법 조건 하나의 시퀀스에 속하는 동일한 숫자가 발생되는 간격은 크다 특정 간격 동안 다른 seed 값에 의해 구해지는 다른 시퀀스에서 동일한 숫자가 하나 이상 발견될 확률은 작다 Partition and merge MANETconf 방법 적용A (3, 3)A (3, 1)B (1, 1)A (3, 5)C (5, 5)B (1, 4)D (4, 4)f(n) = (address * state * 11) mod 7Protocols Utilizing Multiple Disjoint Allocation TablesBuddy protocol 테이블 합병에 의한 buddy system 사용 모든 노드 사이에 다른 할당테이블을 갖음 노드가 분할할 경우 주소의 일부분은 할당에 사용할 수 없음 동기화를 통해 해결 주기적인 flooding Overhead 증가의 문제ADEBC1572?1 25 67 83 4Distributed maintenance of multiple disjoint allocation tableRequesterInitiatorStateless Approaches주소정보를 유지하지 않는 기법 어떠한 할당테이블도 유지 하지 않으므로 스스로 주소를 할당하는 방법 랜덤 주소 선택, 하드웨어 ID Duplicate Address Detection (DAD) 노드가 자신의 임의 선택된 주소와 동일한 주소가 있는지의 여부 판단 DAD를 실행하기 위해 필요한 메시지 flooding MANET 크기가 커질수록 scalability가 떨어짐 DAD Independent of the Routing Protocol Query-based DAD (QDAD) 모든 노드가 스스로 주소를 설정할 수 있음 address request (AREQ), address reply (AREP) 중간의 노드는 다른 노드의 AREP로 인한 역경로 획득 AREP가 없을 경우 새로운 주소 선택DAD Integrated with the Routing Protocol둘 이상의 MANET들이 병합할 경우 발생하는 주소 중복 감지 및 해결 Weak DAD (WDAD) 연결된 MANET에서만 중복성 검출 Merge에 의한 주소 중복 발견 시 주소 설정 방법 모든 노드는 라우팅 제어 메시지에 유일한 키 (인터페이스 키) 추가 제어 메시지를 수신할 경우 자신의 주소와 라우팅 제어 메시지의 발신자 주소는 같지만 키가 다를 경우 중복 주소 Passive DAD (PDAD) 라우팅 제어 메시지에 기본적으로 포함되어 있는 일련번호 사용Hybrid ApproachesStateful and stateless의 결합 형태 Hybrid Centralized Query-Based Autoconfiguration (HCQA) Protocol 하나의 중앙 할당 테이블을 갖는 QDAD DAD가 성공할 경우 동적으로 address authority를 선출하여 할당테이블 에 새로운 주소 삽입 목적 안정된 주소 설정 MANET에서 제거된 노드의 주소 재사용. Passive Autoconfiguration for Mobile Ad Hoc Networks (PACMAN) protocol 분산된 할당 테이블을 갖는 PDAD 각 노드는 어떠한 제어 패킷도 보내지 않음 양 방향 주소에 대한 분석 대역폭과 에너지 소비를 줄일 수 있음Conclusion and Future DirectionsStateful approach Distributed maintenance of a common allocation table 신뢰성 있는 동기화 상태 일치하지 않는 상태가 될 경우 주소 충돌이 일어남 주소 공간의 부족 발생 주기적인 flooding로 인한 많은 대역폭 소모 Centralized maintenance of the allocation table 동적인 리더 선출 알고리즘 요구 상태 복구 Stateless approach Independent of integrated with the routing protocol DAD로 인한 misrouting 예방 Passive approach 대역폭의 소모를 막을 수 있지만 모든 라우팅에 적용할 수 있는 알고리즘 개발 필요 Hybrid protocol Allocation table 유지와 DAD의 결합 Robustness 증가{nameOfApplication=Show}
    공학/기술| 2006.12.13| 15페이지| 1,000원| 조회(375)
    미리보기
  • [공학]데이터마이닝 유전자 알고리즘
    Genetic AlgorithmTable of Contents유전자 알고리즘 다윈의 진화론 유전자 알고리즘의 역사 유전자 알고리즘의 개념이해 유전자 알고리즘의 적용 유전자 알고리즘의 장단점 결론 Q A유전자 알고리즘유전자 알고리즘의 기원 19세기의 Charles Darwin의 진화론에 의한 것으로 자연선택과 적자생존(natural selection and survival of fittest)을 기초로 한 생물학적 관찰 제안 유전자 알고리즘 적용 분야 생물의 유전과 진화 메카니즘을 공학적으로 모델화하여 문제 해결이나 시스템의 학습 등에 응용다윈의 진화론다산 초기의 기본집단에 많은 생물존재 생존경쟁 살아남기 위해 경쟁 변이 변화되는 환경에 살아남기 위해 변이 자연선택 변화에 도태되는 생물은 사라짐 진화 살아남은(강한 생물)생물이 진화된 집단을 이룸유전자 알고리즘의 역사(1)1965년 독일의 Rechenberg 진화전략 발표 두개의 해로 이루어진 해 집단 사용 교차 연산자 사용 안함 1966년 Fogel, Owens, Walsh 진화 프로그램 제안 교차 연산이 없는 변이 사용유전자 알고리즘의 역사(2)1970년대 초기 John Holland 유전 알고리즘의 아버지격 해 집단에 근거, 교차와 변이를 포함한 유전자 알고리즘의 골격 마련 1985년 제 1회 ICGA(International Conference on Genetic Algorithm) 개최 1990년대 Artificial Life의 주된 도구로 활용 1997년 IEEE Transactions on Evolutionary Computing 개설유전자 알고리즘의 개념이해(1)다음의 문제를 생각해보자 해답은 ? X1=14, x2=24인 경우 13이 최적의 해 임의의 수를 발생하여 최적의 해를 찾을 경우 어떻게 하면 빨리 찾을 수 있을까?유전자 알고리즘의 개념이해(2)최적 해의 특징 찾기 최적해 이진법 X1 = 001110 X2 = 011000 최적값 001110011000유전자 알고리즘의 개념이해(3)임의의 해 001111011001 x1=15, x2=25 해=15(o) 001110010000 x1=14, x2=16 해=77(o) 001111110011 x1=15, x2=51 해=743(x) 011111011111 x1=31, x2=31 해=351(x) 001011011111 x1=11, x2=31 해=71(o) 최적 해를 나타내는 스키마의 패턴 001***01****유전자 알고리즘의 개념이해(4)선별(Selection) 현재의 n개의 임의의 해 집단에서 n개를 새로 뽑는 작업 우수한 해는 뽑힐 가능성이 높다 선별작업을 계속한다면 가장 우수한 해만 n개 남음 새로운 해 집단이 생성되는 과정을 '세대(generation)'라고 함 교배(Crossover) 임의의 두 해를 교배하여 새로운 해를 생성 반복하면 우수한 해들로 세대가 구성 우수한 해들은 최적 해의 특징 스키마를 지님 세대가 진행되면 될수록 우수한 해들끼리의 교배가 이뤄짐유전자 알고리즘의 개념이해(5)선별 001111011001 x1=15, x2=25 해=15 001110010000 x1=14, x2=16 해=77 위의 두가지 임의의 해를 선별 교배 001111011|001 x1=15, x2=25 해=15 001110010|000 x1=14, x2=16 해=77 위의 두 임의의 해를 교배 001111011|000 x1=15, x2=24 해=14 001110010|001 x1=14, x2=17 해=62 스키마를 보존하면서 우수한 해를 생성유전자 알고리즘의 개념이해(6)변이(Mutation) 단순히 교배 연산만을 하여 세대를 진행할 경우 최적 해에 근접하지 못할 가능성이 있음 선별 작업이 없었을 경우에도 초기 해들이 최적 해의 특징을 가진 스키마를 가지고 있지 않다면 교배만으로 최적 해를 얻을 수 없음 임의의 유전자(gene)를 변화시켜 새로운 해를 만드는 작업 임의의 해 001111011001 x1=15, x2=25 해=15 001011011111 x1=11, x2=31 해=71 001111010111 x1=15, x2=23 해=15 위의 선별된 해 집단을 가지고 교배를 한다면 최적해 스키마를 만들 수 없음(***********0 의 특징을 가진 해가 없음)유전자 알고리즘의 개념이해(7)유전자 알고리즘의 적용(1)샴푸 + 린스 + 비누 + 식초 의 판매량 표 (초기집단)0100식초X1000O25001O10010O20100선별유무판매량린스비누샴푸유전자 알고리즘의 적용(2)선택되어진 해 집합의 교배 적용 후 판매량 높은 판매량을 기록한 두 개의 set를 신상품으로 출시 고객에게 새로운 set의 탄생을 알리고 주력 상품으로 판매하여 고객 만족도를 높임000식초O50101O35011X5110선별유무판매량린스비누샴푸유전자 알고리즘의 적용(3)변이를 적용한 사례 식초가 린스를 사용하는 것보다 더 좋다는 뉴스가 나간 후 식초를 찾는 고객이 급증 위에 교배를 거친 세대에서는 교배를 아무리 해도 식초를 가진 최적 해를 얻을 수 없음00식초O50101O35011선별유무판매량린스비누샴푸유전자 알고리즘의 적용(4)최적해를 구하기 위해서 선별된 임의의 해중 하나를 선택하여 식초(gene)를 변이함01식초O50101O35011선별유무판매량린스비누샴푸유전자 알고리즘의 적용(5)변이 후 교배하여 원하는 최적 해를 구함 새로운 set의 탄생을 알리고 주력으로 판매하여 고객의 만족도를 높임10식초O70001X30111선별유무판매량린스비누샴푸유전자 알고리즘의 장단점유전자 알고리즘의 장점 최종세대의 결과값이 곧 최적해(해석無) 결과값 적용이 용이 다양한 데이터형태에 적용가능 유전자 알고리즘의 단점 일정한 길이의 Genome으로 표현하는 어려움 최적 해를 보장하지 못함 계산 량이 많음결론유전자 알고리즘을 사용하여 고객이 원하는 새로운 마케팅의 개발 새로운 마케팅의 개발로 고객의 만족도를 높여 기존 고객의 붙잡음과 동시에 새로운 고객을 유치Q A감사합니다.{nameOfApplication=Show}
    공학/기술| 2006.12.13| 21페이지| 1,000원| 조회(746)
    미리보기
  • [공학]XML 프로젝트
    프로그램 개요목적효과적인 명함 관리검색을 통한 해당 명함 찾는 불편함 해소Xml 문서를 통한 명함 공유기능추가수정삭제검색Xml 도출
    프로그램소스| 2006.12.13| 8페이지| 2,500원| 조회(828)
    미리보기
  • [프로그래밍] STL
    STL이해와 사용STL은 무엇인가STL은 제네릭 알고리즘과 데이터 구조를 이용한 최초의 라이브러리를 만들자는 의도에서 설계 유용한 여러 소프트웨어적인 장치들을 발전시켜 이들의 재사용성 (reuse), 모듈화(modularity), 사용편이성(usability)를 보다 높은 수준 끌어 올리고자 하는 것. 즉, STL의 알고리즘은 내장 타입과 다양한 컨테이너 상에서 모두 수행 이 가능하며, 심지어 모든 종류의 컨테이너에서 수행이 가능한 알고리 즘들도 많다. STL은 지난 수년간의 제네릭 프로그래밍 연구를 통해 얻은 산물이다.C++템플릿과 제네릭 프로그래밍템플릿을 이용하여 여러 개의 타입들을 한 개의 클래스로 모두 표현이 가능 template typename T1, typename T2 class pair{ public: T1 first; T2 second; pair(T1 x,T2 y): first(x), second(y) {} }; 위는 여러 가지로 표현이 가능해 진다. pair int, int pair3(3,5); pair int, char pair(4, 'a'); pair bool, double pair5(true, 0.1);C++템플릿과 제네릭 프로그래밍int intmax(int x, int y) { if(x y) return y; else return x; }함수template typename T T max(T x, T y) { if(x y) //연산자 오버로딩을 정의하지 않았다. return y; //수행되지 않는다. else return x; }템플릿C++템플릿과 제네릭 프로그래밍bool operator (const pair double, long x, const pair double, long y) //x의 첫번째 멤버와 y의 첫번째 멤버를 서로 비교 한다. { return x.first y.first; } template typename T const T max(const T x, const T y){ if(x y) return y; else rethar ch; while((ch = cin.peek( ) ) ! = '.' ch! = 'n' cin.get(str[i++]); str[i] = ''; cout “ n 입력받은 문자열 n”; cout str; istream_iterator char in(cin); //키보드로부터 문자열을 받는다.입출력 스트림 반복자istream_iterator char in(cin); //키보드로부터 문자열을 받는다. istream_iterator char eos; find(in, eos, 'x' ); //출력스트림 반복자 out을 서언 ostream_iterator int out (cout, “n”); copy(list1.begin(), list1.end(), out);generic 알고리즘 ( from 김문기)콜렉션 내의 원소 각각에 대해 함수를 적용for_each인접 차들의 시퀀스를 생성adjacent_difference기타연산부분들의 시퀀스를 생성partial_sum두 시퀀스를 비교하여 불일치 찾기mismatch각 원소들을 변환transform두 병렬 시퀀스의 내용 바꾸기생성기를 사용하여 n개의 시퀀스 초기화생성기를 사용하여 시퀀스 초기화시퀀스를 다른 시퀀스로 복사시퀀스를 다른 시퀀스로 복사n개의 자리를 초기값으로 채우기시퀀스를 초기값으로 채우기용도시퀀스 생성 알고리즘swap_rangesgenerate_ngeneratecopy_backwardcopyfill_nfill초기화 알고리즘이름시퀀스에서 최소값 찾기min_element시퀀스에서 최대값 찾기max_element시퀀스 내에서 서브 시퀀스 찾기search시퀀스 내에서 서브 시퀀스의 마지막 발생 찾기find_end시퀀스 내에서 다른 시퀀스에 속하는 멤버중 처음 발견 되는 거 찾기find_first_of연달아 중복된 원소 찾기adjacent_find조건을 만족하는 원소 찾기find_if인자 값과 일치하는 원소 찾기find검색 알고리즘용도이름generic 알고리즘 (from 김문기)generic 알고리즘두 시퀀스의or1, vector2(3); vector char vector1= make vector char (“Bjarne Stroustrup”),vector2; 삽입 push_back, insert 사용 vector1 = make vector char (“Bjarne Stroustrup”); vector2 = make vector char (“ “); vector char ::iterator i; // 반복자 정의 .. 이후 생략 for(i = vector1.begin(); i != vector1.end(); ++i) vector2.insert(vector2.begin(), *i); //vector1을 vector2로 복사시퀀스 컨테이너 --- 벡터 사용하기STL벡터의 capacity함수와 reserve함수 vector1.capacity() //벡터의 메모리 블록 사이즈를 확인 vector2.reserve(N); //재할당이 일어나지 않도록 미리 충분한 크기 N으//로 메모리를 할당한다. 벡터에서의 삭제(pop_back연산과 erase연산) cout vector1.back(); //마지막 원소를 출력하고 vector1.pop_back(); //마지막 원소를 지운다 cout vector1.front(); //맨 처음 원소를 출력하고 vector1.erase(vector1.begin()); //처음 원소를 삭제한다.시퀀스 컨테이너 --- 벡터 사용하기벡터에서의 대입 template typename InputIterator void assign(InputIterator first, InputIterator last); 이와 기능적으로 동일한 코드 erase(begin(), end()); insert(begin(), first, last);시퀀스 컨테이너 ---벡터(vector), 덱(deque), 리스트(list)블럭 3블럭 2블럭 1요소의 크기빈공간요소의 수끝시작요소3요소2요소1빈공간요소7요소8요소6요소5요소4빈공간요소10요소9그림 데크 구현데크 헤더블럭1블럭2블럭3시퀀식왼쪽 자식그림 집합의 구현정렬 연관 컨테이너 – 집합(set),multiset삽입 #include set ... list char list1 = make list char (“There is is “); set char set1; list char ::iterator i; for( i = list1.begin(); i != list1.end(); ++i) set1.insert(*i) assert(list2 == make list char (“Tehirs”)); //정렬 그리고 중복제거 !!multiset의 경우는 중복을 허용한다는 것이 다르다.정렬 연관 컨테이너 – 집합(set),multiset삭제 set1.erase(k); //키값이 k인 원소를 모두 삭제 multiset1.erase('a'); set1.erase(i); //반복자 i가 참조하는 원소를 삭제 multiset char ::iterator i = multiset1.find('e'); multiset1.erase(multiset1.find('e'));정렬 연관 컨테이너 – 집합(set),multisetset과 multiset의 지정된 구간에 속하는 원소들의 삭제 multiset char ::iterator i; i = multiset1.find('T'); multiset char ::iterator j = multiset1.find('v'); multiset1.erase(i, j); //집합에서 T부터 v까지 삭제. multiset char multiset1; copy(list1.begin(),list1.end(),inserter(multiset1, multiset1.end())); //list1에 담긴 문자들을 multiset1에 삽입정렬 연관 컨테이너 – 집합(set),multiset멀티셋의 검색 관련 //multiset에 문자열 Aaaaabbbbcccdd가 있다면 multiset char ::iterator i = multiset1.lower_bound('a'), //첫번째 a j = muary) ); for( string_input j(cin) ; j != string_input( ) ; ++j) { string word = *j; sort(word.begin() , word.end() ); bool found_one = false;do { if ( binary_search(dictionary.begin(), dictionary.end(),word) ) { cout “ “ word endl; found_one = true; } } while ( next_permutation( word.begin(), word.end() ) ); if ( !found_one ) cout “not found” endl; } return 0; }컨테이너 어댑터스택(stack) 스택은 어떤 순차 컨테이너보다도 제한적이기 때문에, 어떤 컨테이너에도 이용 될 수 있다.//데크를 이용하여 게임 이벤트 처리를 위한 스택을 만든다. stack deque GameEvent eventStack; eventStack.push(currentEvent); //... //스택 내의 모든 이벤트를 처리한다. while (!eventStack.empty()){ GameEvent event = eventStack.top(); event.Process(); eventStack.pop(); } //벡터를 이용하려면 stack vector GameEvent eventStack;컨테이너 어댑터큐(queue) 큐는 디폴트로 데크 구현을 이용하지만 리스트를 이용하는 것 도 가능하다.//디폴트로 큐는 데크를 이용한다. queue Message message; messages.push(getNetworkMessage()); //... //받은 메시지들을 순서대로 처리한다. while (!messages.empty ( ) ) { const Message msg = messages.front( ); process(msg); messages.pop( ); } //리스트로 구현은 queue list Messaghow}
    공학/기술| 2005.08.13| 39페이지| 1,000원| 조회(1,123)
    미리보기
전체보기
받은후기 5
5개 리뷰 평점
  • A+최고예요
    1
  • A좋아요
    4
  • B괜찮아요
    0
  • C아쉬워요
    0
  • D별로예요
    0
전체보기
해캠 AI 챗봇과 대화하기
챗봇으로 간편하게 상담해보세요.
2026년 04월 23일 목요일
AI 챗봇
안녕하세요. 해피캠퍼스 AI 챗봇입니다. 무엇이 궁금하신가요?
4:40 오후
문서 초안을 생성해주는 EasyAI
안녕하세요 해피캠퍼스의 20년의 운영 노하우를 이용하여 당신만의 초안을 만들어주는 EasyAI 입니다.
저는 아래와 같이 작업을 도와드립니다.
- 주제만 입력하면 AI가 방대한 정보를 재가공하여, 최적의 목차와 내용을 자동으로 만들어 드립니다.
- 장문의 콘텐츠를 쉽고 빠르게 작성해 드립니다.
- 스토어에서 무료 이용권를 계정별로 1회 발급 받을 수 있습니다. 지금 바로 체험해 보세요!
이런 주제들을 입력해 보세요.
- 유아에게 적합한 문학작품의 기준과 특성
- 한국인의 가치관 중에서 정신적 가치관을 이루는 것들을 문화적 문법으로 정리하고, 현대한국사회에서 일어나는 사건과 사고를 비교하여 자신의 의견으로 기술하세요
- 작별인사 독후감