用c++写一个向量类,分为行向量和列向量,提供向量的转置操作,能使行向量转置成列向量,列向量转置成行向量
时间: 2023-12-16 19:51:43 浏览: 25
以下是一个简单的向量类的实现,包括行向量和列向量的定义以及向量转置操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int length;
double *values;
} Vector;
typedef enum {
ROW_VECTOR,
COLUMN_VECTOR
} VectorType;
// 创建向量
Vector *createVector(int length, VectorType type) {
Vector *vec = malloc(sizeof(Vector));
vec->length = length;
vec->values = malloc(sizeof(double) * length);
if (type == ROW_VECTOR) {
printf("创建行向量\n");
} else {
printf("创建列向量\n");
}
return vec;
}
// 销毁向量
void destroyVector(Vector *vec) {
free(vec->values);
free(vec);
printf("向量已销毁\n");
}
// 转置向量
Vector *transpose(Vector *vec) {
Vector *trans = createVector(vec->length, vec->type == ROW_VECTOR ? COLUMN_VECTOR : ROW_VECTOR);
for (int i = 0; i < vec->length; i++) {
trans->values[i] = vec->values[i];
}
return trans;
}
int main() {
Vector *rowVec = createVector(3, ROW_VECTOR);
Vector *colVec = createVector(4, COLUMN_VECTOR);
Vector *transRowVec = transpose(rowVec);
Vector *transColVec = transpose(colVec);
destroyVector(rowVec);
destroyVector(colVec);
destroyVector(transRowVec);
destroyVector(transColVec);
return 0;
}
```
在上述代码中,我们使用了两个结构体,一个是向量结构体 `Vector`,另一个是向量类型枚举 `VectorType`。在向量结构体中,我们存储了向量的长度以及元素值,使用了 `double` 类型存储向量元素。在向量类型枚举中,我们定义了两种向量类型,即行向量和列向量。
我们提供了一些向量的操作,包括创建向量、销毁向量以及向量转置。在创建向量时,我们使用了向量类型枚举来确定向量的类型。在转置向量时,我们通过创建一个新的向量来存储转置后的向量,同时交换行向量和列向量的维度。
在 `main` 函数中,我们创建了一个行向量和一个列向量,并对它们进行了转置操作,最后销毁了所有向量。