在 C 语言中转换C++向量的实现
Converting C++ implementation of vector in C
我用C++编写了以下代码,但是发现我必须用C转换它。我不是C,甚至不是C++程序员,请帮忙。
有人可以帮我把这个方法改成C指令,特别是矢量实现,下面不会编译,我已经删除了复杂性以保持简单。谢谢期待。
__declspec(dllexport) std::vector<MY_STRUCT> WINAPI ABC(char *strVal)
{
MY_STRUCT f;
std::vector<MY_STRUCT> list = std::vector<MY_STRUCT>();
while (*dddd)
{ /*do the following for every feature in license file*/
f.attrib_num = fi.attrib_num;
f.attrib_lic = fi.attrib_lic;
list.push_back(f);
} /* end while(conf) */
dddd++;
printf("n");
} /* end while (*dddd) */
return flist;
}
这是 C 中结构动态数组的实现(也是用法)。您可以使其适应您的结构;我曾经在代码审查中发布过它
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int ID;
char * name;
} Student;
// array of structs
typedef struct
{
Student *array;
size_t used;
size_t size;
} Array;
void initArray(Array *a, size_t initialSize)
{
int i = 0;
// Allocate initial space
a->array = malloc(initialSize * sizeof(Student));
a->used = 0; // no elements used
a->size = initialSize; // available nr of elements
// Initialize all values of the array to 0
for(i = 0; i<initialSize; i++)
{
memset(&a->array[i],0,sizeof(Student));
}
}
// Add element to array
void addElement(Array *a, Student element)
{
int i = 0;
if (a->used == a->size)
{
a->size *= 2;
a->array = realloc(a->array, a->size * sizeof(Student));
// Initialize the last/new elements of the reallocated array
for(i = a->used; i<a->size; i++)
{
memset(&a->array[i],0,sizeof(Student));
}
}
// Copy name
a->array[a->used].name = (char*)malloc(strlen(element.name) + 1);
strcpy(a->array[a->used].name, element.name);
// Copy ID
a->array[a->used].ID=element.ID;
a->used++;
}
void freeArray(Array *a)
{
int i = 0;
// Free all name variables of each array element first
for(i=0; i<a->used; i++)
{
free(a->array[i].name);
a->array[i].name=NULL;
}
// Now free the array
free(a->array);
a->array = NULL;
a->used = 0;
a->size = 0;
}
int main(int argc, const char * argv[])
{
Array a;
Student x,y,z;
x.ID = 20;
x.name=malloc(strlen("stud1") + 1);
strcpy(x.name,"stud1");
y.ID = 30;
y.name=malloc(strlen("student2") + 1);
strcpy(y.name,"student2");
z.ID = 40;
z.name=malloc(strlen("student3") + 1);
strcpy(z.name,"student3");
// Init array, don't forget
initArray(&a, 5);
// Add elements
addElement(&a, x);
addElement(&a, y);
addElement(&a, z);
// Print elements
printf("%dn", a.array[0].ID);
printf("%sn", a.array[0].name);
printf("%dn", a.array[1].ID);
printf("%sn", a.array[1].name);
printf("%dn", a.array[2].ID);
printf("%sn", a.array[2].name);
// Free array
// don't forget
freeArray(&a);
free(x.name);
free(y.name);
free(z.name);
return 0;
}
相关文章:
- 为共享 ptr 向量实现复制 c'tor?
- C++:实现向量和矩阵类的最佳结构
- priority_queue使用降序向量实现最小堆的语法差异
- 布尔向量实现
- C++ 使用向量实现合并排序
- 如何为向量实现 std::erase ?
- 如何使用指针向量实现类析构函数 C++.
- 为对象向量实现快速排序算法
- 为什么这个普通的数组实现比STD ::向量实现性能慢
- C++向量实现push_front错误
- 使用向量 c++ 实现 trie 时的分割错误
- C++ 向量实现 - 移动构造函数 - 移动与前进
- 不使用外部库的稀疏向量实现建议
- 大多数数据结构都可以使用向量实现吗?
- 为简单向量实现复制构造函数
- 如何在c++中使用向量实现一个简单的树,没有二进制或avl树
- 堆排序从介绍到算法在c++中使用向量实现
- 使用指针向量实现 Dijkstra 算法
- 如何使用向量实现bubblesort
- 希望使用向量实现更好的c++堆栈