user-0 提问: 关于C++代码改写为C的问题

回复:
user: user-1
content: 引用 3 楼 fangzhangran956 的回复:[quote=引用 1 楼 paschen 的回复:] 自己封装一个，vector很容易封装 这个不用C++的特性就能写出来吗，比如模板什么的，[/quote]  C里没有模板，你需要容器中是什么类型，就封装成什么类型

user: user-0
content: 引用 5 楼 lishunihaoa 的回复:[quote=引用 4 楼 fangzhangran956 的回复:] [quote=引用 2 楼 lishunihaoa 的回复:] 这里有C语言实现Vector的 http://blog.csdn.net/dengxu11/article/details/7311820 这个能进行的定义吗？[/quote]  那是肯定不行的，这是C++的语法，用C语言功能达到就行了啊。[/quote] 我用的就是vector<vector<rect>>这种呀，我想知道的是如何在C中去实现这个功能

user: user-2
content: 引用 4 楼 fangzhangran956 的回复:[quote=引用 2 楼 lishunihaoa 的回复:] 这里有C语言实现Vector的 http://blog.csdn.net/dengxu11/article/details/7311820 这个能进行vector<vector<rect>>的定义吗？[/quote]  那是肯定不行的，这是C++的语法，用C语言功能达到就行了啊。

user: user-0
content: 引用 2 楼 lishunihaoa 的回复:这里有C语言实现Vector的 http://blog.csdn.net/dengxu11/article/details/7311820 这个能进行vector<vector<rect>>的定义吗？

user: user-0
content: 引用 1 楼 paschen 的回复:自己封装一个，vector很容易封装 这个不用C++的特性就能写出来吗，比如模板什么的，

user: user-2
content: 这里有C语言实现Vector的 http://blog.csdn.net/dengxu11/article/details/7311820

user: user-1
content: 引用 3 楼 fangzhangran956 的回复:[quote=引用 1 楼 paschen 的回复:] 自己封装一个，vector很容易封装 这个不用C++的特性就能写出来吗，比如模板什么的，[/quote]  C里没有模板，你需要容器中是什么类型，就封装成什么类型  引用 10 楼 fangzhangran956 的回复:[quote=引用 7 楼 paschen 的回复:] [quote=引用 3 楼 fangzhangran956 的回复:] [quote=引用 1 楼 paschen 的回复:] 自己封装一个，vector很容易封装 这个不用C++的特性就能写出来吗，比如模板什么的，[/quote]  C里没有模板，你需要容器中是什么类型，就封装成什么类型[/quote] vector这个我用二维指针好了，你说的我不太明白，我知道我在C里可以重新定义一个类似的结构体来替换vector，但是替换之后vector<vector>这个我不知道怎么实现，我只知道这个会用到C++的模板特性，你说的我不太懂，可否详细解释一下？[/quote]  vector<int> 就用int* 动态申请内存 vector<vector<int> >就用int**动态申请内存 其他同理  一开始可以分配能存一定容量的空间，当空间够时重新分配更大的，复制原来数据到新空间，释放原来的内存

user: user-3
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-0
content: 引用 7 楼 paschen 的回复:[quote=引用 3 楼 fangzhangran956 的回复:] [quote=引用 1 楼 paschen 的回复:] 自己封装一个，vector很容易封装 这个不用C++的特性就能写出来吗，比如模板什么的，[/quote]  C里没有模板，你需要容器中是什么类型，就封装成什么类型[/quote] vector这个我用二维指针好了，你说的我不太明白，我知道我在C里可以重新定义一个类似的结构体来替换vector，但是替换之后vector<vector>这个我不知道怎么实现，我只知道这个会用到C++的模板特性，你说的我不太懂，可否详细解释一下？

user: user-0
content: 引用 8 楼 zhao4zhong1 的回复:不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！ 这个我也不想这么做，可是这是要移植到硬件上边的，只能用C，而我只有C++的代码，这个工作逃不掉了。。。。

user: user-3
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！

user: user-1
content: 自己封装一个，vector很容易封装