2016-09-12 10 views
0

私は配列を渡す必要がある関数を持っています。サブアレイを関数に渡す

しかし、私はアレイ全体(array [0]からarray [size-1]までの有効なインデックス)を渡すのではなく、サブアレー(array [5] [サイズ-1])。

C++でこれを行う方法はありますか?

+0

1クラシックC++配列は 'サブアレイ' の概念がなかったです。 2.コストは変わらず、配列はポインタで渡され、配列と2つのインデックスを渡すことができます。 –

+2

または、最初の要素にポインタを、最後の要素の後にポインタを渡すことで、イテレータの概念を使用できます。 – KIIV

+2

配列を関数に渡すことはできません。しようとすると、実際に配列の最初の要素のアドレスを渡します。 5から始まる部分配列が必要な場合は、5番目の要素のアドレスを渡すだけです。とにかくCスタイルの配列を使うべきではありません。 std :: vectorとiteratorsを使用します。これはC++の方法です。 –

答えて

0

あなたはまた、配列の特定の範囲を転送することができ

void Foo(int* arr, int length); 
//call Foo 
Foo(&a[0], length); //or 
Foo(a, length); 

下のパラメータを関数に配列を転送することができます。

Foo(&a[1], length); 
Foo(a + 1, length); 

単なるコード。

#include <iostream> 
void Print(int* arr, int length) 
{ 
    for(int i=0; i < length; i++) 
    { 
     std::cout << *(arr + i) << ", "; 
    } 

    std::cout << std::endl; 
} 

int main() 
{ 
    int a[5] = {1,2,3,4,5}; 

    //type A 
    Print(&a[0], sizeof(a)/sizeof(int)); //print all element of a 
    Print(&a[1], 3); //print 2,3,4 

    //type B 
    Print(a, sizeof(a)/sizeof(int)); //print all element of a 
    Print(a + 1, 3); //print 2,3,4 

    getchar(); 
    return 0; 
} 
0

Quoted comment by n.m.:

あなたは、関数に配列を渡すことはできません。しようとすると、実際に配列の最初の要素のアドレスを渡します。 5から始まる部分配列が必要な場合は、5番目の要素のアドレスを渡すだけです。とにかくCスタイルの配列を使うべきではありません。 std :: vectorとiteratorsを使用します。これはC++の方法です。

示されているように、配列の基本ポインタにオフセットを追加できます(それに応じて、渡された配列のサイズを引きます)。

"イテレータースタイル"の実装を実現するために、配列のポインタをbeginと(最後を1つ後に)ポインターを関数に渡します。

But as you are programming C++, please consider to use std::vector.

例:

#include <iostream> 

void foo(int arr[], int size) { 
    for (int i = 0; i < size; i++) 
     std::cout << arr[i] << ' '; 
} 

void bar(int* begin, int* end) { 
    while (begin != end) 
     std::cout << *begin++ << ' '; 
} 

int main() { 
    int arr[] = {0,1,2,3,4,5,6,7,8,9}; 
    int size = sizeof(arr)/sizeof(*arr); 

    // pass entire array 
    foo(arr, size); 
    //bar(arr, arr+size); 
    std::cout << '\n'; 

    // pass array starting at index 5 
    foo(arr+5, size-5); 
    //bar(arr+5, arr+size); 
    std::cout << '\n'; 
} 

出力である:

$ g++ test.cc && ./a.out 
0 1 2 3 4 5 6 7 8 9 
5 6 7 8 9