C ++에서 배열과 벡터의 차이점은 무엇입니까? 차이점의 예로는 라이브러리, 상징, 능력 등이 있습니다.
정렬
배열에는 특정 유형의 특정 요소 수가 포함됩니다. 프로그램이 컴파일 될 때 컴파일러가 필요한 공간을 예약 할 수 있도록 배열이 정의 될 때 포함 할 요소의 유형과 수를 지정해야합니다. 컴파일러는 프로그램이 컴파일 될 때이 값을 결정할 수 있어야합니다. 배열이 정의되면 인덱스와 함께 배열의 식별자를 사용하여 배열의 특정 요소에 액세스합니다. [...] 배열은 인덱스가 0입니다. 즉, 첫 번째 요소는 인덱스 0에 있습니다.이 인덱싱 체계는 C ++에서 포인터와 배열 간의 밀접한 관계와 언어가 포인터 산술에 대해 정의하는 규칙을 나타냅니다.
— C ++ 포켓 레퍼런스
벡터
벡터는 배열 스타일의
operator[]
임의 액세스 를 제공하는 동적 크기의 객체 시퀀스입니다 . 멤버 함수push_back
는 복사 생성자를 통해 인수를 복사하고 해당 복사본을 벡터의 마지막 항목으로 추가하고 크기를 1 씩 증가시킵니다.pop_back
마지막 요소를 제거하여 정반대로 수행합니다. 벡터의 끝에서 항목을 삽입하거나 삭제하는 것은 상각 된 일정한 시간이 걸리며 다른 위치에서 삽입하거나 삭제하는 데는 선형 시간이 걸립니다. 이것이 벡터의 기본입니다. 그들에게는 더 많은 것이 있습니다. 대부분의 경우 벡터는 C 스타일 배열보다 먼저 선택해야합니다. 우선, 동적으로 크기가 조정되므로 필요에 따라 확장 할 수 있습니다. C 배열의 경우처럼 최적의 정적 크기를 알아 내기 위해 모든 종류의 조사를 할 필요는 없습니다. 벡터는 필요에 따라 커지며 필요한 경우 수동으로 더 크게 또는 더 작게 조정할 수 있습니다. 둘째, 벡터는at
멤버 함수로 경계 검사를 제공 하지만operator[]
), 따라서 단순히 프로그램 충돌을 관찰하는 대신 존재하지 않는 인덱스를 참조하는 경우 또는 더 나쁜 경우 손상된 데이터로 실행을 계속할 수 있습니다.— C ++ 요리 책