노트 알고리즘 제 6 장 C ++ 표준 템플릿 라이브러리 (STL) 소개 연구 노트

상세 6.1 벡터의 일반적인 사용

벡터 : 가변 길이 배열의 어레이, 필요에 따라 자동으로 변경의 길이

벡터를 사용하려면, 벡터 필요가 헤더를 추가하는, 즉 사용법 #include <벡터>, 헤더 파일은 또한 A를 다음에 추가해야 "을 사용하여 네임 스페이스 표준;"

1.vector 정의

하나의 벡터를 정의

벡터 <유형 이름> 이름;

TYPENAME 표준 STL 컨테이너, 예를 들어 같은 벡터 집합 큐 수 있고, 염기, 예를 들어, INT, 두 번째 문자와 다른 구조의 임의의 타입 일 수있다.

시간이 유형 이름의 STL 컨테이너 인 경우 >> 심볼 플러스 공간 사이에 기억 정의.

상기 방법에 정의 어레이 벡터 : 벡터 <유형 이름> Arrayname [arraySize];

이러한 Arrayname는 [0] ~ Arrayname는 [arraySize-1] 각 컨테이너의 벡터이다.

 

2.vector 컨테이너 요소 내에서 액세스

첨자 (1) 액세스

벡터 <유형 이름> VI;

우리 [인덱스]

0에서 색인) (vi.size하기 - 1

(2) 반복자를 통해 액세스 할 수

벡터 <유형 이름> :: 반복자를 :

예를 들면 :

벡터 <INT> :: 반복자를;

벡터 <더블> :: 반복자 그것;

#INCLUDE <cstdio> 
#INCLUDE <벡터>
 사용  스페이스 성병;
int로 주 () { 
    벡터 < INT > VI;
    위한 ( INT 난 = 1 ; I <= 5 ; I ++ ) { 
        vi.push_back (I); 
    } 
    벡터 < INT > :: = 반복기는 vi.begin ();
    위한 ( INT 난 = 0 ; I < 5 ; I ++ ) { 
        printf와 ( " %의 D " * (이것은 + Ⅰ)); 
    } 
    반환 0 ; 
}

 

 VI [I] 및 * (vi.begin () + i)가 동등

캐나다 반복자는 두 가지 작업을 구현 : ++ 그것을하고 ++

#INCLUDE <cstdio> 
#INCLUDE <벡터>
 사용  스페이스 성병;
int로 주 () { 
    벡터 < INT > VI;
    위한 ( INT 난 = 1 ; I <= 5 ; I ++ ) { 
        vi.push_back (I); 
    } 
     (벡터 < INT > :: 반복기는 vi.begin을 () =,! = 그것이 vi.end () 그것을 ++ ) { 
        printf와 ( " %의 D ' * 로); 
    } 
    반환  0 ; 
}

 

만 벡터 및 문자열은에만 허용 vi.begin () + 3이 반복자 플러스의 정수를 작성.

 

일반적으로 사용되는 분석 기능의 예 3.vector

(1)와 push_back (X) (X)가 벡터 뒤 요소를 추가 시간 복잡도는 O (1)은

(2)와 pop_back는 ()는 벡터의 마지막 요소를 삭제, 시간 복잡도는 O (1)은

(3) 크기 () : 얻어진 벡터의 요소의 수는 시간 복잡도는 O (1)은

(4) 투명한 () : 삭제 벡터의 모든 요소는 시간 복잡도가 O (N)은, N은 벡터의 요소 수이다

(5) 삽입물 () : 인서트 (전, X)은 임의의 요소의 삽입에 사용되는 X 벡터 반복자 그 시간 복잡도는 O (N)이다에서

(6) 소거 () 두 가지 방식으로 : 범위의 모든 요소를 ​​개별 항목을 삭제 삭제.

    1 (vi.begin () + 3)는 단일 소자 vi.erase 삭제, 삭제 VI를 [3]

    제 2 섹션은 모든 요소를 ​​삭제 vi.erase (vi.begin () + 1 vi.begin () + 4) VI 삭제 VI [1], [2], VI [3]

4.vector의 일반적인 사용

(1) 데이터 기억

(2) 인접하는 테이블 기억도.

PAT A1039 학생을위한 코스 목록

절강 대학은 40,000 학생을 가지고 있으며, 2500 개 교육 과정을 제공합니다. 이제 모든 과정의 학생 이름 목록을 제공, 당신은 출력에 쿼리 오는 각 학생에 대한 등록 된 코스 목록을 가정하고 있습니다.

입력 사양 :

각 입력 파일은 하나의 테스트 케이스가 포함되어 있습니다. : 각각의 경우를 들어, 첫 번째 라인은이 양 개의 정수가 들어  N ( ≤), 자신의 코스 목록을 찾아 학생들의 수와  K ( ≤), 교육 과정의 총 수를. 그런 다음 학생 이름 목록은 (1 번까지 번호가 매겨진 과정에 대해 주어진  다음과 같은 형식으로 K) : 각 코스  내가 먼저 코스 지수는  전 등록 된 학생의 수  N 나는 ( ≤)를에 제시되어있다 선. 그런 다음 줄에,  N 내가 학생 이름이 부여됩니다. 학생의 이름은 3 개 자본 영어 문자 플러스 한 자리 숫자로 구성되어 있습니다. 마지막으로 마지막 줄에 포함 된 쿼리를 위해 온 학생들의 N 이름. 라인의 모든 이름과 번호는 공백으로 구분된다.

출력 사양 :

각 테스트 케이스를 들어, 귀하의 결과 인쇄  N 라인. 한 학생에게 각 행의 대응은 다음과 같은 형식 : 먼저 학생의 이름, 등록하는 학생의 과정, 그리고 마지막으로 순서를 증가시키는 과정의 인덱스의 다음 수를 인쇄 할 수 있습니다. 조회 결과가 입력과 같은 순서로 인쇄한다. 라인의 모든 데이터는 라인의 끝 부분에 별도의 공간을 공백으로 구분해야합니다.

샘플 입력 :

11 5
4 7
BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
1 4
ANN0 BOB5 JAY9 LOR6
2 7
ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6
3 1
BOB5
5 9
AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6 NON9

샘플 출력 :

ZOE1 2 4 5
ANN0 3 1 2 5
BOB5 5 1 2 3 4 5
JOE4 1 2
JAY9 4 1 2 4 5
FRA8 3 2 4 5
DON2 2 4 5
AMY7 1 5
KAT3 3 2 4 5
LOR6 4 1 2 4 5
NON9 0

 

#INCLUDE <cstdio> 
#INCLUDE <CString을>  
#INCLUDE <벡터> 
#INCLUDE <알고리즘>
 사용  공간을 성병;
CONST  INT N = 40,010 ;
CONST  INT의 M = 26 * 26 * 26 * 10 + 1 ; 
벡터 < INT > selectCourse [M]; 

INT getID ( 이름 []) {
     INT의 ID = 0 ;
    위한 ( INT 난 = 0 ; I < 3; I ++ ) { 
        ID = ID * 26 + (이름 [I] - ' ' ); 
    } 
    ID = ID * 10 + (이름 [ 3 ] - ' 0 ' );
    반환 ID를; 
} INT 의 main () {
      이름 [ 5 ];
    INT의 N, K; 
    scanf와 ( " % D % D " , 및 N, K);
    위한 ( INT 난 = 0 ; I <K; I ++ ) {
         INT의 코스, X; 
        scanf와 (
" % D % D " , 물론, X);
         ( INT J = 0 ; J <x, J ++ ) { 
            는 scanf ( " % S " 이름);
            INT ID = getID (이름); 
            selectCourse [ID] .push_back (코스); 
        } 
    } 
    에 대해 ( INT 난 = 0 ; i가 <N; I ++ ) { 
        는 scanf ( " % S " 이름);
        INT ID = getID (이름); 
        정렬 (selectCourse [ID]) (.begin, selectCourse [ID] .END ()); 
        의 printf (" % S % D " 이름, selectCourse [ID] 크기는 ());
         ( INT J = 0 ; J <selectCourse [ID] 크기는 (); J ++ ) { 
            printf와 ( " %의 D " , selectCourse [ID] [J]); 
        }     
        의 printf ( " \ n " ); 
    } 
    반환  0 ; 
}

 

추천

출처www.cnblogs.com/coderying/p/11914193.html