1)如果事先不知道元素个数,如何声明数组,原始向量无法解决,你必须创建自己的具有增长能力的向量。
typedef struct {
double * v;
unsigned int size;
} Vector;
这个结构是新数据类型的基础。您需要一个 API,例如:
Vector createVector();
void addToVector(Vector *v, double x);
double getFromVector(Vector *v, unsigned int pos);
void modifyInVector(Vector *v, unsigned int pos, double x);
unsigned int sizeOfVector(Vector * v);
void destroyVector(Vector *v);
API 的主要成员是 createVector、destroyVector 和 addToVector。由于这可能是家庭作业,因此我不会为您解决。
在 createVector 中,你基本上必须将所有字段置为 0。
在destroyVector,你必须free() v;
在 addToVector 中,您必须 resize() 保留空间以便适合另一个新项目:
size_t newSize = ( v->size +1 ) * sizeof( double );
现在您必须使用新大小调用 realloc()。
基本上就是这样。如果你想要更好的性能,你还可以引入向量的容量,这样就不必每次添加新值时都让它增长。例如,使用 C++ 构建 STL 的人每次超过容量时都会使向量类增长一倍。但是,无论如何,那是另一回事了。