std::vector<T,Allocator>:: resize
|
void
resize
(
size_type count
)
;
|
(1) | (C++20부터 constexpr) |
|
void
resize
(
size_type count,
const
value_type
&
value
)
;
|
(2) | (C++20부터 constexpr) |
컨테이너의 크기를 count 개의 요소를 포함하도록 조정합니다:
- count 가 현재 크기와 같으면 아무 작업도 수행하지 않습니다.
- 현재 크기가 count 보다 크면, 컨테이너는 처음 count 개의 요소로 축소됩니다.
- 현재 크기가 count 보다 작으면:
목차 |
매개변수
| count | - | 컨테이너의 새로운 크기 | ||
| value | - | 새로운 요소들을 초기화할 값 | ||
| 타입 요구사항 | ||||
-
|
||||
복잡도
현재 크기와 count 사이의 차이에 선형적으로 비례합니다. 용량이 count 보다 작을 경우 재할당으로 인해 추가적인 복잡도가 발생할 수 있습니다.
예외
어떤 이유로든 예외가 발생하면, 이 함수들은 아무런 효과를 가지지 않습니다(
strong exception safety guarantee
).
명시적으로 지정되지는 않았지만,
새로운
vector
에 필요한 용량이
max_size()
를 초과할 경우
std::length_error
가 발생합니다.
|
오버로드
(
1
)
에서,
|
(since C++11) |
참고 사항
오버로드에서 값 초기화가 바람직하지 않은 경우,
(
1
)
예를 들어 요소들이 비클래스 타입이고 제로화가 필요하지 않은 경우,
사용자 정의
Allocator::construct
를 제공하여 이를 피할 수 있습니다.
더 작은 크기로 리사이징할 때 벡터 용량은 절대 감소하지 않습니다. 왜냐하면 그러면 모든 반복자가 무효화되기 때문이며, 명세서는 삭제된 요소들에 대한/이후의 반복자들만 무효화하기 때문입니다.
예제
#include <vector> #include <iostream> void print(auto rem, const std::vector<int>& c) { for (std::cout << rem; const int el : c) std::cout << el << ' '; std::cout << '\n'; } int main() { std::vector<int> c = {1, 2, 3}; print("The vector holds: ", c); c.resize(5); print("After resize up to 5: ", c); c.resize(2); print("After resize down to 2: ", c); c.resize(6, 4); print("After resize up to 6 (initializer = 4): ", c); }
출력:
The vector holds: 1 2 3 After resize up to 5: 1 2 3 0 0 After resize down to 2: 1 2 After resize up to 6 (initializer = 4): 1 2 4 4 4 4
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 수정된 동작 |
|---|---|---|---|
| LWG 679 | C++98 |
resize()
가
value
를 값으로 전달함
|
const 참조로 전달 |
| LWG 1525 | C++98 | resize ( size ( ) ) 의 동작이 명시되지 않음 | 명시됨 |
| LWG 2033 | C++11 |
1. 요소들이
erase()
[1]
를 사용하여 제거됨
2.
T
의 타입 요구사항이 부정확함
|
1.
pop_back()
사용
2. 수정됨 |
| LWG 2066 | C++11 | 오버로드 ( 1 ) 가 오버로드 ( 2 ) 의 예외 안전성 보장을 가지지 않음 | 추가됨 |
| LWG 2160 | C++11 | LWG 2033의 해결로 인해 요소들이 pop_back() [2] 를 사용하여 제거됨 | 요소 제거 방법을 명시하지 않음 |
-
↑
erase()
는
vector의 중간에 있는 요소들을 제거할 수 있으므로, 제거된 구간 뒤에 있는 요소들이 빈 공간을 채우기 위해 앞으로 이동될 수 있도록 값 타입이 MoveAssignable 요구사항을 충족해야 합니다. 그러나resize()는vector의 끝에 있는 요소들만 제거할 수 있으므로 MoveAssignable 요구사항이 필요하지 않습니다. - ↑ pop_back() 을 사용하여 요소를 제거하는 것은 요소들이 뒤에서부터 앞으로 순차적으로 제거되어야 함을 의미합니다.
참고 항목
|
가능한 최대 원소 개수를 반환합니다
(public member function) |
|
|
원소의 개수를 반환합니다
(public member function) |
|
|
현재 할당된 저장 공간에 보관할 수 있는 원소의 개수를 반환합니다
(public member function) |
|
|
컨테이너가 비어 있는지 확인합니다
(public member function) |