아래의 코드와 주석을 참조하십시오 :할당 요소
vector<int> v1(10);
cin>>v1[0]; // allowed
cin>>v1[1]; // allowed
// now I want v1 to hold 20 elements so the following is possible:
cin>>v1[15]>>v[19]; // how to resize the v1 so index 10 to 19 is available.
아래의 코드와 주석을 참조하십시오 :할당 요소
vector<int> v1(10);
cin>>v1[0]; // allowed
cin>>v1[1]; // allowed
// now I want v1 to hold 20 elements so the following is possible:
cin>>v1[15]>>v[19]; // how to resize the v1 so index 10 to 19 is available.
:
v1.resize(20);
당신은 resize을 사용할 수 있습니다 like :
v1.resize(20);
벡터 :: resize()는 크기를 조정하고 기본 죄수로 채 웁니다. tructed objects (int,이 경우에는 중요하지 않으므로).
vector :: reserve()는 공간을 채우지 않고 할당합니다.
원하는 항목이 많을 때까지 push_back()과 같은 항목을 추가 할 수 있습니다. 필요에 따라 크기가 조정됩니다.
중요합니다. 왜냐하면 사람들이 불평하기 전에 (개념적으로, 세부적인 약간 더 복잡한) x [
'예약'은 용량 만 증가시키지 않습니다. 따라서 OP의 경우, 예비 (20) 후에 요소 15와 19에 액세스 할 수 없습니다. 그것을 위해'resize'가 필요합니다. –
@Martin : granted -하지만 의미있는 것은 시간이 많이 소요되는 생성자가 아니거나 자신이 제어 할 수있는 생성자가 아니라는 것입니다. – jwismar
당신을 사용할 수 있습니다, 당신은 istream_iterator
반복자 범위를 사용할 수 있으며,이처럼 vector
범위-생성자 되었 cin
에서 많은 값을 읽으려면 :
#include <iterator> // for istream_iterator
#include <vector>
#include <iostream> // for cin
// ...
std::vector<int> v1((std::istream_iterator<int>(std::cin)), // extra()
std::istream_iterator<int>());
(여분의 괄호는 예방해야합니다 ("C++ most vexing parse"). Cf. 또한 Constructing a vector with istream_iterators.
이것은 정확히 내가 원하는 것은 아니지만 그것의 유용한 기능입니다. 많은 상황에서, 우리가 할 첫 번째 일은 그것을 선언 한 후 벡터에 입력하는 것입니다. –
크기를 조정 한 후 push_back을 요구하지 않고 cin을 사용하여 입력 할 수 있습니까? –
@Gunner :'벡터 v1 (10);은'vector v1;과 실질적으로 동일합니다. v1.resize (20);'. 그렇다면'push_back'에 대해 무엇을 가지고 있습니까? (''reserve''와''push_back'')는 무엇입니까? –
@James : 그 반대는 아니지만 그 상황은 그런 것입니다. 임시 변수 대신 벡터에 직접 입력합니다. 결국 양쪽 모두 동일 할 것이지만 대안이 있는지 궁금해하고있었습니다. –