2014-02-26 1 views
1
#include <iostream> 
#include <vector> 

int main() 
{ 
    static const unsigned TOTAL = 4; 

    std::vector<int> v[TOTAL]; 

    v[2].push_back(37); 

    //std::cout << v.size(); error 
    std::cout << v[0].size(); 
    std::cout << v[2].size(); 

    return 0; 
} 

std::vector은 위 코드에서와 같이 대괄호로 묶어야 유효합니까?표준 크기로 대괄호로 std :: vector 만들기

MSVS 및 ideone은 정상적으로 컴파일되지만 벡터가 엉망입니다 (오류 라인 참조).

내가 resize을 사용할 수 있음을 알고 있지만, 여기서 무슨 일이 일어나고있는가?

답변

5

TOTAL 크기의 벡터 배열을 만듭니다. 당신이 필요로하는 무엇

이것은 TOTALints을 제로 초기화와 벡터를 구성

std::vector<int> v(TOTAL); 

입니다. 그런 다음

,

std::cout << v.size() << std::endl; // prints 4 
std::cout << v[0] << std::endl;  // prints 0 

등등.

+1

그리고'v [2] .push _... '대신'v.push _...'를 사용하십시오. –

+0

오! 고마워요. 잠이 좀 필요해. :) – relaxxx

1

std::vector은 코드와 같이 괄호로 인스턴스화하는 것이 효과적이지만 다른 의미가 있습니다.

std::vector<int> v[TOTAL]; 

이 다음은 벡터를 size=TOTALv 정의, 각 요소는의 vector<int>이다. 처음에는이 TOTALvector<int>가 모두 비어 있습니다 (예 : size=0).

당신이 v[2].push_back(37);를 호출 한 후, v[2]는의 값 37으로 size=1vector<int> 될 것이다.

따라서 다음에 대한 출력은 01이됩니다.


당신이 size()를 호출 할 경우, v[i].size() 전화를 걸거나 vector<int> v(TOTAL);로 정의한다

std::cout << v[0].size(); 
std::cout << v[2].size(); 

( v는, 각 요소가있는의 int입니다 size=TOTAL의 벡터이다).

1

크기를 조정할 수 있다는 것을 알고 있습니다. 그러나 여기서 무슨 일이 벌어지고 있습니까?

당신이 basicly 여기에 같은 유형 std::vector<int>의 배열을 생성하는

:

int arr[TOTAL]; 

는 위의 코드처럼 브라켓과 표준 : : 벡터를 instatnitate하는 것이 유효인가?

당신은 벡터 배열을 가질 수 있지만 귀하의 게시물은 이후의 것이 아닙니다.당신이 당신의 벡터를 부여하려면

일부 초기 크기는

std::vector<int> v(TOTAL); 

이 TOTAL로 벡터의 초기 크기를 설정합니다 사용하고, 값은 모든 요소를 ​​(제로로 설정) 초기화합니다. std::vector<int> v(TOTAL); 귀하와 push_back의 경우 인덱스 TOTAL에서 추가 시작됩니다

std::vector<int> v; 
v.reserve(TOTAL); // this is not necessary 
// v.size() is zero here, push_back will add elements starting from index 0 

때문에 :

그러나 실제로 할 수 있습니다.