2011-12-17 3 views
4

런타임에 vector의 크기를 결정할 수 있습니까? 예를 들어런타임에 벡터 크기를 결정하는 방법은 무엇입니까?

입력 : 25 // 벡터의 크기 당신은 (아마도) 잘못된 방법으로 vector을 사용하는

code : 
     int N ; 
     cin << N ; 
     vector <int> data[N]; 
+4

[std :: vector :: size()] (http : // w ww.cplusplus.com/reference/stl/vector/size/)? –

+0

런타임에는 크기 N (컴파일시 알 수 없음)의 벡터를 만들 수 없습니다. –

+2

@fatai 아마도'std :: vector'가 아니라 'array'를 의미했을 것입니다. – dasblinkenlight

답변

9

... 당신은 C 스타일 배열을 정의하는 방법을 보여줍니다한다 당신은 아마 정의 할 때, N 벡터 (N은 컴파일시에 알려질 필요가 있기 때문에 그런데, 그 구문은 표준되지 않습니다)는이 방법으로 이루어집니다 N 요소를 포함 vector :

vector<int> data(N); 

: 당신은 단지 그 방법 size() 호출 할 필요가 런타임 1에서 크기를 얻으려면

(N 요소 긴 기본 초기화 배열을 만듭니다 vector의 한 매개 변수의 생성자를 호출)

cout<<"The vector contains "<<data.size()<<" elements.\n" 
사실
  1. 심지어 컴파일 타임에 크기를 물어 이해가되지 것은, vector의 크기 때문에 (의도 그것에 저장된 요소의 수)는 런타임에만 정의됩니다. 당신이 관심을 가질만한
+2

downvoter 마음이 설명할까요? –

13

두 가지 방법 :

예 니펫을

std::vector<int> v; 

    for (int i =0; i < 25; ++i) 
    v.push_back (i); 

    v.reserve (100); 

    std::cerr << "Elements: " << v.size () << std::endl; 
    std::cerr << "Capacity: " << v.capacity() << std::endl; 

출력

Elements: 25 
Capacity: 100 

내가 원래 게시물에 귀하의 예제 조각이 적어도 하나의 오타가 포함되어 있음을 추측하고있어을 신고하지 마세요.과 N 요소를 아래에 작성하십시오.

당신이 작성한 데이터는 vector<int> 크기가 N이고, N이 컴파일 타임에 알려 지거나 컴파일러에 가변 길이 배열 확장이있는 경우 컴파일됩니다.


vector<int> data[N]; 

vector를 생성하고 처음부터 N 요소를 삽입하기 :

std::vector<int> data (N); 
2

Matteo이 권리입니다. 그의 대답에 덧붙여 라. 런타임에 벡터 크기를 반드시 정의 할 필요는 없습니다. 나는 당신이 C++을 사용하고 있다고 가정하고있다.

단지

data.push_back(<some integer>) 

당신이 그들에게 크기를 줄 필요가 배열을 좋아하지 그것의 할 당신은

vector<int> data; 

을 쓴 후마다 당신은 벡터의 끝에 요소에 원하는 사용하기 전에. 벡터는 동적으로 커지고 축소 될 수 있습니다. 따라서 메모리 할당에 신경 쓸 필요가 없습니다. 런타임시 컴파일러와 vector 클래스에 의해 처리됩니다.

3

당신은 거의 다 있습니다

사용

vector <int> data(N); 

대신

vector <int> data[N]; 

당신이 -1, 말, 0이 아닌 값으로 벡터의 모든 요소를 ​​설정해야하는 경우 , 사용하십시오 vector <int> data(N, -1);

관련 문제