2014-07-07 4 views
1

쉬운 단계 4 단계에서 C++ 프로그래밍을 읽었으며 이해하는 데 문제가있는 부분을 읽었습니다. 나는 단지 하루 만에 그것을 읽기 시작했습니다.C++ 벡터 배열/WhileLoop

책의 해당 부분을 다룰 때 벡터 배열과 요소 주위에 머리를 쓰는 데 특히 어려움을 겪었습니다. 시도하고 이해하는 데 많은 시간이 걸리지 만 자신감이 들지 않았습니다. 다시 방문 할 계획을 세우십시오. 나는 모든 것을 이해

#include <iostream> 
#include <vector>  // Include vector support (Vector function library) 
using namespace std; 

int main() 
{ 


    //Declaring an integer vector and an integer variable for loop counter 
    vector <int> vec (10); 
    int i = 0; 


    //Now inserting a while loop to assign a counter value to an element of the vector on each iteration 
    while (i < vec.size()) 
    { 
     i++;     //Increment the counter 
     vec[ i -1 ] = i;  // Assign count to element 

     cout << " | " << vec.at (i -1); 
    } 


    return 0; 
} 

하지만,이 행 : 내가 여기에 루프를 시연하고 있지만이 책의 후반부에 지금이야 내가 (그냥 한 줄)에 문제가 있어요 코드입니다

 vec[ i -1 ] = i;  // Assign count to element 

정확히 제가 특히 -1 부분에 대해 무엇을하고 있는지 잘 모르겠습니다. 누군가 이해하기 쉬운 방식으로 나를 무너 뜨릴 수 있습니까? 벡터 어레이에 대한 섹션을 빠르게 다시 방문하여 이해할 수 있는지 알아 보겠습니다.

+1

배열과 벡터는 인덱스를 사용하여 아래 첨자를 통해 액세스 할 수 있습니다. 'i-1'은 색인입니다. – chris

+0

나는 그것을 지금 이해한다고 생각한다. 카운트 다운 : 벡터 vec (10); 10에서 0까지? 각 요소에 값을 할당할까요? 누구든지 – user3810660

+0

10 벡터 크기를 확인할 수 있습니다. 'i'는 0에서 시작하고 인덱스 표현식에서 'i'가 사용됩니다. 'i'는 루프 본문이 실행될 때마다 증가합니다. 따라서 카운트 업합니다. – chris

답변

2

벡터 표시는 0부터 시작합니다. 10 개 요소의 벡터는 0에서 9까지 색인화됩니다. 목표를 1에서 10까지 연속적으로로드하고, 을 0에서 시작하고 인덱스 표현식에서 사용하기 전에 증가 시킨다면 적절한 인덱스를 얻기 위해 1을 뺄 필요가 있습니다.

이 코드는 동일한 작업을 수행합니다.

vector<int> vec(10); 

int i = 0; 
while (i < vec.size()) 
{ 
    vec[i] = i + 1; 
    i++; 
} 

i = 0; 
while (i < vec.size()) 
{ 
    cout << i << ": " << vec.at(i) << endl; 
    i++; 
} 
1

당신이 while 루프가 실제로 (당신이 시계 문 등을 디버거와 while 루프를 통해 실행도 추가된다면 비슷한 볼 것이다 개별 진술에 의해 달성 무엇에 아래 코드를 어기면 그것은 당신을 도움이 될 수 있습니다 i-1) :

#include <iostream> 
#include <vector>  // Include vector support (Vector function library) 
using namespace std; 

int main() 
{ 


    //Declaring an integer vector and an integer variable for loop counter 
    vector <int> vec (10); // vector of 10 elements: 0...9 
    int i = 0; // i starts with the value of 0 

    // replace while loop with the individual statements the loop accomplishes 
    // note also that vec.size() = 10 
    // while (i < vec.size()) 

    // increment i to 1 (started as 0, from above) 
    i++;     //Increment the counter 
    vec[ 0 ] = i;  // i - 1 = 0 here - Assign count to element 
    cout << " | " << vec.at (0); 
    // increment i to 2 
    i++;     //Increment the counter 
    vec[ 1 ] = i;  // i - 1 = 1 here - Assign count to element 
    cout << " | " << vec.at (1); 

    // continue to i = 9 ... 

    // increment i to 10 
    i++;     //Increment the counter 
    vec[ 9 ] = i;  // i - 1 = 9 here - Assign count to element 
    cout << " | " << vec.at (9);  
    return 0; 
} 
1

벡터에 1에서 1o까지의 숫자를 할당하면됩니다.

vec[i-1] = i 

귀하의 첫 번째 인덱스는 카운트/단계 더 인덱스에 값을 할당하고, 의미 직접 i++ 후 다음과 같습니다. 또한 할당 자에 대한 사용 템플릿처럼 정말 멋진 일을한다 :

i = 0; 
i = 1;here vec[ 1 - 1] = vec[0] = 1 
i = 2;here vec [2 - 1] = vec[1] = 2 
i = 3;and finally vec[ 2 ] = 3 
0

벡터는 배열의 래퍼 클래스 (Link to C++ reference 소스)입니다 간단히 말하면 는의가 벡터에 삽입 I의 첫 번째 4 개 값과 요소를 수행 할 수 동적 공간을 제공하고 stl 반복자를 사용합니다.

따라서 벡터는 [] 연산자를 사용하여 배열처럼 액세스 할 수 있습니다. 두 코드 단편은 동일하다

우선, 어레이 형태 :

//Allocate and assign array 

int* arr[5]={1,2,3,4,5}; 

//Print the 3rd element, note that the first index corresponds to 0. 

std::cout<< arr[2] <<std::endl; 

//Reassign the 2nd element: 

arr[1]=54; 

이제 벡터 버전 :

//Allocate and assign vector 

std::vector<int> arr({1,2,3,4,5}); 

//Print the 3rd element, note that the first index corresponds to 0. 

std::cout<< arr[2] <<std::endl; 

//Reassign the 2nd element: 

arr[1]=54; 

현명한위한 팁이 같은 경로를 액세스하는 사람 위험 할 수있다 배열의 크기는 코드의 다른 위치에서 변경할 수 있습니다.대신 할당을 위해 다음을 고려하십시오.

std::vector<int> arr({1,2,3,4,5}); 
int index=0; 
for(std::vector<int>::iterator it = arr.begin(); it!= arr.end(); ++it){ 
    if(index++ == 3){ 
     (*it) = 54; 
    } 
}