-1

シリーズの一次元配列から配列の配列を作成する方法、例: 次のような配列があります:

long int arr[20] = {23, 91, -71, -63, 22,  55, 51, 73, 17, -19,-65, 44, 95,  66, 82, 85, 97, 30, 54, -34};

そして、次のように昇順で配列の配列を作成したい:(C ++で)

23, 91  
-71, -63, 22,  55  
51, 73  
17  
-19  
-65, 44, 95  
66, 82, 85, 97  
30, 54  
-34

すでにいくつの配列があるかを試しました

int sum=0;
for(int i=0;i<n-1;i++)
    if(arr[i]>arr[i+1])sum++;
return sum;
4

3 に答える 3

0
int sum=0;
for(int i=0;i<n-1;i++)
    if(arr[i]>arr[i+1])sum++;
return sum;

する必要があります

int sum = 0;
if (n > 0)
{
    for (int i = 0; i < n - 1; i++)
        if (arr[i] > arr[i+1])
            sum++;
    sum++;
}

お使いのバージョンでは、昇順の数字の最後のシーケンスはカウントされません。

それが始まりです。次にしなければならないことは、各行へのポインタに十分なメモリを割り当てることです。次に、数値をもう一度調べ、各行の長さを数え、その行にメモリを割り当て、その行をもう一度調べて、その行の数値をコピーします。それは単なるループです(ループ内)。行き詰まった場合は、コードを投稿してください。

于 2013-09-28T07:15:59.383 に答える
0

vector of vectorの代わりに作成するのはarray of arrayどうですか?index out of bound exception配列では、または hugeのいずれかを引き起こすサイズを決定する必要がありますspace lost。ベクトルを使用する場合、ベクトルのサイズを決定するつもりはありません。ベクトルのサイズを満たすと、より多くのスペースが割り当てられます。

初期配列が降順の場合、倍精度配列のサイズは になりますnx1。昇順の場合は1xn、倍精度配列を作成して、 (およそ)いつ許容nxnされないかを指定しないようにする必要があります。exceptionn > 10^4

の基本的な構文vector of vectorは次のとおりです。

vector<vector<int>> myvect; //initialization
myvect.at(i).at(j) = x;     //reaching i_th row, j_th col element
myvect.at(0).push_back(1);  //add element to the end of the row0.    

このウェブサイトはベクトルを説明するのに良さそうです。

以下はサンプル コードです。テストしていないため、小さな構文エラーがある可能性があります。

vector<vector<int>> myvect; //initialization

int size = 20;
long int arr[size] = {23, 91, -71, -63, 22,  55, 51, 73, 17, -19,-65, 44, 95,  66, 82, 85, 97, 30, 54, -34};

int row = -1; int val = arr[0]+1;
for(int i = 0; i < size; i++){
    if(arr[i] < val){
        row++;
        myvect.push_back(vector<int> () );
    }
    myvect.at(row).push_back(arr[i]);
}

コードは基本的にこのようなものです。

于 2013-09-28T07:22:35.273 に答える