2016-08-31 3 views
0

그래서 다음과 같은 방식으로 작동하는 프로그램을 만들었습니다.역 배열 함수

사용자가 배열의 크기를 결정합니다.

그런 다음 x 선택된 정수로 사용자가 배열을 채 웁니다. 그들이 배열 5를 크게 만들도록 선택하면 배열에 5 개의 숫자를 채우도록 요청됩니다. 그러나 나는이 작업을 수행 할 수있는 방법에 조금 갇혀있다. 일단이 비트가 완료되면 할당 된 값으로 코드를 하드 코딩하고 함수 역량을 프로그램으로 역변환하여 테스트했다.

여기 내 코드입니다. 내가 배열의 각 인덱스에 정수를 반복 입력 루프 또는 무언가에 대한을 사용할 필요가 있다고 생각합니까

#include <iostream> 

using std::cout; 
using std::endl; 
using std::cin; 

void reverse(int [], int); 
void printarray(int [], int); 

void printarray(int arr[], int count) 
{ 
     for(int i = 0; i < count; ++i) 
       cout<<arr[i]<<' '; 

     cout<<'\n'; 
} 

void reverse(int arr[], int count) 
{ 
    int temp; 
    for (int i = 0; i < count/2; ++i) 
    { 
      temp = arr[i]; 
      arr[i] = arr[count-i-1]; 
      arr[count-i-1] = temp; 
    } 
} 

int main() 
{ 
     int x; 
     cout << "how big is this thing " << endl; 
     cin >> 
     const int SIZE = x; 
     int arr [SIZE] = {., ., ., ., ., ., ., . , ., .}; 

     cout<<"Before reverse\n"; 
     printarray(arr, SIZE); 
     reverse(arr, SIZE); 
     cout<<"After reverse\n"; 
     printarray(arr, SIZE); 

     return 0; 
} 

미안 그것은 너무 오래 내가 배열을 수행 한 이후되었습니다. 이 문제에 대한 도움을 주시면 감사하겠습니다. M.M에서 언급 한 바와 같이

+1

가'SIZE'가 배열에 대해 컴파일 타임에해야 다음 시도 할 수 있습니다. 사용자가 배열의 크기를 변경할 수 있다면 고정 된 최대 크기를 사용해야하거나 배열 대신'vector'와 같은 다른 컨테이너를 사용해야합니다. –

답변

-1

, 표준 : : 벡터를 사용하여 벡터의 시작 부분에 삽입

#include <iostream> 
#include <vector> 


int main(int argc, char** argv) 
{ 
    std::vector<int> values; 
    int n_values; 

    std::cout << "How mutch numbers ?"; 
    std::cin >> n_values; 

    std::cout << "Now Enter " << n_values << " Values : "; 
    for(auto i=0; i<n_values; i++) 
    { 
     int tmp; 
     std::cin >> tmp; 

     values.insert(values.begin(), tmp); 
    } 

    for(auto elem : values) 
     std::cout << elem << "\n"; 


    return 0; 
} 
+3

좋은 프로그래밍 습관에 관해서는, 입력이 파일에서오고, 5 또는 7보다 높을 수 있다면,이 접근법은 2 차 시간, O (n²)를가집니다. 대신'.push_back'과'std :: reverse' (자유 함수)에 대한 최종 호출을 사용했다면 더 합리적인 O (n)을 가질 수 있습니다. –

+0

'std :: begin'을 왜 사용합니까? 나는 그것이 템플릿에서만 사용할 줄 알았지 만, 여기에 벡터가 이미'.begin()'이 아닌 이유가 있다는 것을 알았습니까?난 그냥 궁금 해서요 – szx

+0

@szx, 맞아, 내가 바꿨어 :) – Roby

0

이 숙제 운동 같은 소리 (당신이 역있어 필요하지 않습니다)? 대부분의 경우 std :: vector와 같은 것을 사용할 것이지만 네이티브 배열을 고수해야 할 것입니다.

int arr[SIZE]; 

이 스택에 배열을 생성하며, 크기는 컴파일 타임에 알고 있어야합니다. 당신이 new 키워드를 사용하여 힙에 배열을 할당 (또는 malloc 같은 것을 통해)

int *arr = new int[x]; 

당신은 당신이있어 일단이 메모리를 직접 확보해야해야합니다 런타임 때까지 크기를 알 수없는 경우 done though

delete[] arr; 

시작하기에 충분하고 올바른 방향으로 향하게해야합니다. 희망은 도움이

0

왜냐하면 배열의 크기를 알 수없는 컴파일 시간에 당신은 int array[SIZE] 구조를 사용할 수 없습니다.

당신은 new로 실행시 메모리를 할당해야합니다

int x; 
cout << "how big is this thing " << endl; 
cin >> x; 
int *arr = new int[x]; 

for(int i = 0; i < x; i++) { 
    cout << "enter arry[" << i << "]" << endl; 
    cin >> arr[i]; 
} 

cout<<"Before reverse\n"; 
printarray(arr, SIZE); 
reverse(arr, SIZE); 
cout<<"After reverse\n"; 
printarray(arr, SIZE); 

delete[] arr; 

delete[] arr 연산자는 할당 된 배열을 해제합니다. 메모리 누수를 피하려면 할당 된 모든 메모리 블록을 해제해야합니다.

0

당신은이 ..

#include <iostream> 
#include <string> 

void reverse(int arr[], int count) 
{ 
    int temp; 
    for (int i = 0; i < count/2; ++i) 
    { 
      temp = arr[i]; 
      arr[i] = arr[count-i-1]; 
      arr[count-i-1] = temp; 
    } 
} 

void print_array(int my_array[], int array_size) 
{ 
    std::cout << "Your array: "; 
    for (int x = 0; x <array_size; x++) { 
     std::cout << my_array[x] << " "; 
    } 
    std::cout << std::endl; 
} 

int main() 
{ 
    int array_size; 
    std::cout << "how big is this thing " << std::endl; 
    std::cin >> array_size; 

    int my_array[array_size]; 

    std::cout << "Please enter the elements of the array. Press ENTER after each element." << std::endl; 
    for (int x = 0; x <array_size; x++) { 
     std::cin >> my_array[x]; 
    } 

    print_array(my_array, array_size); 

    std::cout << "Reverse array..." << std::endl; 
    reverse(my_array, array_size); 
    print_array(my_array, array_size); 
}