2016-05-05 190 views
1

我正在使用C++。
我有以下矩阵:矩阵向量C++

{1,2,3,4,5} 
{6,7,8,9,10} 
{11,12,13,14,15} 
{16,17,18,19,20} 
{21,22,23,24,25} 

,我想矩阵转换为5个vectros如下:

a[5] = {1,6,11,16,21}; 
b[5] = {2,7,12,17,22}; 
c[5] = {3,8,13,18,23}; 
d[5] = {4,9,14,19,24}; 
e[5] = {5,10,15,20,25}; 

我想每个矩阵列转换为向量。
我有一个需要5个载体,并将其转换为矩阵代码:

typedef int *pInt; 
//Each element of arr is a int-type pointer 
pInt arr[5] = {a, b, c, d, e}; 

int matrix[5][5] = {0}; 
for(int i = 0; i < 5; ++i){ 
    for(int j = 0 ; j < 5; ++j){ 
     matrix[i][j] = arr[j][i]; 
    } 
} 

那么我怎样才能转换矩阵向量?

+0

你是否有任何限制:你是否必须保持矩阵中的值完好无损,矩阵的大小是否会发生变化或者是否已修复,矩阵可能有多大,您是否尝试优化某些事物(速度,记忆)等? – svs

回答

1

下面的代码做这项工作:

int n=5; 
int** vec = new int*[n]; 
for(int j=0;j<n;j++){ 
    vec[j] = new int[n]; 
    for(int i=0;i<n;i++){ 
     vec[j][i] = matrix[i][j]; 
    } 
} 
for(int i=0;i<n;i++){ 
    cout<<"Vector: "<<i<<endl; 
    for(int j=0;j<n;j++){ 
     cout<<vec[i][j]<<" "; 
    } 
    cout<<endl; 
} 

你被int** vec = new int*[n]
这里创建整数指针数组,VEC [J]将代表Ĵ矢量(array )并创建vec[j] = new int[n]

+0

嗨,我只是试过你的代码,我认为它不适合我 – Evyatar

+0

@Evyatar你得到的错误是什么?我测试了代码,它的工作方式与你在你的问题中描述的一样。 –

1

如果我对你说得对。 对于每个我(行)你会填写不同的数组。事情是这样的:

for(int i = 0; i < 5; ++i) 
{ 
    for(int j = 0 ; j < 5; ++j) 
    { 
     if(i == 0) 
     { 
      //fill the first vector 
     } 
    } 
} 
+0

你想说如果(i == 0)正确吗? – Evyatar

+0

是的。弄糊涂了。编辑 –

1

我知道你要求代码从矩阵转换为向量,然后这些新的向量翻转矩阵,但你可以一步完成整个过程。

int n = 5; 
int vec[n][n]; 
for(int i = 0; i < n; ++i) 
{ 
    for(int j = 0; j < n; ++j) 
    { 
     vec[i][j] = matrix[j][i]; 
    } 
} 

因为你只是想行要在新的矩阵列,所有你需要做的就是换行和列迭代器(即矩阵的标准符号是矩阵[行] [列],所以上面的代码迭代vec的第一行,因为它也遍历第二个矩阵的第一列,创建你想要的反演)

还要注意,尽管这些东西是数学中的矩阵和向量,但您正在使用的实际数据结构是数组和二维数组(或数组的阵列)。