상세 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 ; }