2017-06-05 13 views
-1

配列int X[x_size]が与えられたら、新しい配列int Y[x_size * x_size]を作成し、Xの値を順番にコピーしたいと思います。配列のサイズを同じパターンで繰り返す

たとえば、X = {0, 1, 2}と指定した場合、配列Y{0, 1, 2, 0, 1, 2, 0, 1, 2}になります。

あなたが標準ライブラリを楽しんでいるために許可されていると仮定すると、
int main(int argc, const char * argv[]) { 
    int x[3] = [0,1,2]; 
    int * y = makeY(a,3); 
} 
int * makeY(int x[], int size) { 
    int *y = new int[size * size]; 
    for(int i = 0; i < size; size+=2) 
     for(int j = i; j < j + (size - 1); j++) 
      for (int i = 0; i < size; i++) 
       y[j+i] = x[i]; 
    return y; 
} 
+0

サイズ(X)= 3とサイズ(Y)= 9。何かが間違っている "Yは二重の大きさになる"、あなたの例を確認したりしてくださいあなたの説明。 – Rakete1111

+0

私はあなたがサイズを二乗するのではなく二倍にすることを意味すると推測しますが、 'size + = 2'はまだ変わっています – Ap31

+0

質問がありますか?何か動作していないのですか?より具体的にする必要があります – Tas

答えて

-1

あなたはポインタで作業したい場合は、私はそれがローカル変数であるので、yを返す代わりにyのポインタを渡すことをお勧めします。今

void makeY(int * x, int * y, int size){  
    for(int i=0; i<size; i++){ 
     for(int j = 0; j < (size); j++){ 
     y[j*size + i] = x[i]; 
     } 
    }  
} 

あなたはこのようにそれを使用することができます:

int main() 
{ 
    int size = 3; 
    int x[size] = {0, 1, 2}; 
    int y[size * size]; 
    makeY(x, y, size); 
} 
+1

VLAは標準ではありません。 –

-1

std::vector<int> repeat_square_vector(const std::vector<int>& original) 
{ 
    std::vector<int> repeated(original.size() * original.size()); 
    std::generate(repeated.begin(), repeated.end(), [&original](){static size_t i = 0; return original[i++ % original.size()];}); 
    return repeated; 
} 

int main() 
{ 
    std::vector<int> original = {0, 1, 2}; 
    std::vector<int> repeated = repeat_square_vector(original); 
    //repeated == {0, 1, 2, 0, 1, 2, 0, 1, 2} 
} 
+0

主な機能も提供できるので、あなたのアプローチがどのように使われているか分かりますか? –

+0

@ m.kサンプルメインを追加しました。 –

-1

私は一般的なロジックに追加してい:

y_size=x_size*x_size; 
i=0; 
for(j=0;j<y_size;j++) 
{ 
    if (i<x_size) 
    { 
     y[j]=x[i++]; 
    } 
    else 
    { 
     i=0; 
     y[j]=x[i++]; 
    } 
} 
関連する問題