23

配列内の最大の整数を返す単純な関数を作成しています。私が抱えている問題は、配列内の要素の数を見つけることです。

関数ヘッダーは次のとおりです。

int largest(int *list, int highest_index)

配列「リスト」内の整数の数を取得するにはどうすればよいですか。

私は次の方法を試しました:

int i = sizeof list/sizeof(int); //returns incorrect value
int i = list.size(); // does not compile

どんな助けでも大歓迎です!

4

5 に答える 5

10

それを行う方法はありません。これは、配列の代わりにベクトルを使用する (多くの理由の中でも) 正当な理由の 1 つです。ただし、配列を使用する必要がある場合は、配列のサイズをパラメーターとして関数に渡す必要があります

int largest(int *list, int list_size, int highest_index)

C++ の配列は非常に貧弱です。ベクトルの使い方を学ぶのが早ければ早いほど、物事を見つけやすくなります。

于 2013-11-10T20:25:20.187 に答える
4

簡単な答えは、できないということです。変数に格納する必要があります。C++ の大きな利点は、STL があり、ベクトルを使用できることです。size() メソッドは、その時点でのベクトルのサイズを示します。

#include<iostream>
#include<vector>
using namespace std; 
int main () {
    vector<int> v;
    for(int i = 0; i < 10; i++) {
        v.push_back(i);
    }
    cout << v.size() << endl;
    for(int i = 0; i < 10; i++) {
        v.push_back(i);
    }
    cout << v.size() << endl;
    return 0;
}

出力:
10
20

未検証。しかし、うまくいくはずです。;)

于 2013-11-10T20:28:16.230 に答える
3

ポインターには、参照する要素の数に関する情報はありません。関数呼び出しの最初の引数について話している場合、 list が配列の場合、実際に構文を使用できます

sizeof( list ) / sizeof( int )

3つのアプローチがあることを追記したいと思います。1 つ目は、参照渡しの配列を使用することです。2 つ目は、最初の要素へのポインターと要素の数を使用することです。そして 3 つ目は 2 つのポインターを使用することです。通常、標準アルゴリズムが定義されているため、開始ポインターと最終ポインターです。文字配列には、それらを処理する追加の可能性があります。

于 2013-11-10T20:26:53.357 に答える
2

可変配列サイズで覚えておく必要があります。ポインターから配列サイズを取得する可能性はありません。

const int SIZE = 10;
int list[SIZE];
// or
int* list = new int[SIZE];  // do not forget to delete[]
于 2013-11-10T20:26:15.360 に答える