2012-04-25 3 views
0

프로그래밍 프로젝트 (mancala)를 작업 중이며 배열을 쓸 때 막혔습니다. 나는이 줄은 처음 초기화 지금까지 난 단지동일한 값을 가진 배열 채우기, 값을 다시 설정하는 루프

{

int i; 
    int beadArray[MAX] = {4}; 

    for (i = 0; i < MAX; i++) 
    { 
      beadArray[i] = -1; 
    } 

    for (i = 0; i < MAX; i++) 
    { 
      cout<<i<<"\t"; 

    } 
+0

단지 2 인 경우 색인에 액세스하여 ** ** **을 (를) 직접 할당 할 수 없습니다. 아무튼, 당신이 채울 필요가있는 배열 인덱스가 연속적이라면,'std :: fill'을 사용할 수 있습니다. 하지만 나는 2 가지 배열 요소를 사용하기 때문에 이전 방법을 선호한다. – Mahesh

답변

1
int beadArray[MAX] = {4}; 

이 네 가지의 값으로 모든 보드 쓰레기통을 채우고 배열을 작성해야하고 0으로 두 개의 쓰레기통을 재설정 4 요소, 그리고 4

뭔가 사용하여 벡터를 0으로 나머지, 아니 그들 모두는 미래에 처리하고 더 쉽게 될 것이다 :

std::vector<int> beadArray (MAX, 4); //MAX elements, initialized to 4 
beadArray [indexToReset1] = 0; //reset one element 
beadArray [indexToReset2] = 0; //reset other element 

//print array - C++11 
for (int bead : beadArray) 
    cout << bead << '\t'; 

//print array - C++03, consider using std::for_each instead 
for (vector<int>::const_iterator it = beadArray.begin(); it != beadArray.end(); ++it) 
    cout << *it << '\t'; 

비 벡터 솔루션 : 벡터없이

, STL의 agorithms 여전히 사용할 수 :

int beadArray [MAX]; 

std::fill (beadArray, beadArray + MAX, 4); 
beadArray [6] = beadArray [13] = 0; //just the two elements 
std::fill (beadArray + 6, beadArray + 13, 0); //the range of elements from 6-13 

ostream에 반복자를 사용하는 것입니다 배열을 인쇄하려면 좀 더 영리한 방법 :

std::copy (beadArray, beadArray + MAX, std::ostream_iterator<int> (std::cout, "\t")); 

그냥 일반 C++ :

int beadArray [MAX]; 

for (int i = 0; i < MAX; ++i) 
    beadArray [i] = 4; //set every element to 4 

beadArray [6] = beadArray [13] = 0; //set elements 6 and 13 to 0 

for (int i = 0; i < MAX; ++i) 
    cout << beadArray [i] << '\t'; //print each element separated by tabs 
+0

벡터를 사용하고 싶지 않다고 가정 해 봅시다. 모든 값을 4로 채우고 루프를 사용하여 위치 6과 13을 0으로 채우고 싶습니다. 어떻게해야합니까? – chrisvx930

+0

@ chrisvx930, 벡터를 사용하지 않기로 한 답을 업데이트했습니다. 그것은 당신의 인생을 더 쉽게 만들어주는 알고리즘을 사용합니다. 그래서 그것을 사용하십시오! :) – chris

+0

다시 한번 감사드립니다 - 문제는 가능한 한 간단하게 유지하고 싶습니다. 나는 확실히 초보자이며 지금까지 게시 한 내용을 정말로 이해할 수 없습니다. 나는 당신이 제공 한 도움에 대해 진심으로 감사하며, 간단한 방법으로이 문제를 고칠 수 있다면 대단히 감사하겠습니다! – chrisvx930

1

인덱스 6과 13을 채우기 위해 루프를 사용하도록 지정하는 이유는 무엇입니까? 두 값만 채우는 경우 루프가 필요하지 않습니다.

이것은 mancala 게임에만 해당되므로 255보다 큰 숫자 (단일 바이트가 가질 수있는 최대 값)를 사용할 필요가없는 경우 서명되지 않은 char 배열과 memset을 사용할 수 있습니다.

char beadArray[MAX]; 
memset(beadArray, 4, sizeof(beadArray)); 
beadArray[6] = beadArray[13] = 0; 
for(int i = 0; i < sizeof(beadArray); i++) 
    cout << beadArray[i] << "\t"; 
관련 문제