2017-06-05 51 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

“Y加倍的大小” 的大小(X)= 3,大小(Y)= 9,什么是错的,请检查你的榜样或你的描述。 – Rakete1111

+0

我会猜测你的意思是把它的大小加倍,而不是加倍,但是'size + = 2'仍然看起来很奇怪 – Ap31

+0

你有问题吗?有什么不工作?您需要更具体的 – Tas

回答

-1

如果你想使用指针工作,我建议传递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++]; 
    } 
}