LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1391|回复: 8

如何将一个多维数组放入map对象中?

[复制链接]
发表于 2005-7-15 20:47:18 | 显示全部楼层 |阅读模式
因为在c++中,数组名称指向数组的第一个元素的地址。

for example:

typedef double[2] double_array;

//here is global declaration of a map object
map<string, double_array*> myMap;

void some_function()
{
     //myArray is local variable...
      double_array myArray[100];
      // some initialization or manipulation of array element
      ......
      // now, save the array into a map
      myMap.insert(make_pair("My Array", myArray);

}// some_function ends here

这段程序的问题是,myArray是局部变量,在c++里,数组名称指向数组的第一个元素的地址, 所以myMap.insert(make_pair("My Array", myArray)只是把myArray的地址保存了下来。一旦some_function结束之后,myArray就不再存在了,如果我要用到myMap里的myArray中的任何值,它们也已经不存在了。我的问题是,如何解决这个问题?让myArray还做为局部变量,如何当函数some_function结束时,我还可能从myMap里哪到我原来的myArray???
thanks
发表于 2005-7-15 22:41:11 | 显示全部楼层
Post by zlly20
让myArray还做为局部变量,如何当函数some_function结束时,我还可能从myMap里拿到我原来的myArray???
thanks


无可能.
回复 支持 反对

使用道具 举报

发表于 2005-7-16 12:04:16 | 显示全部楼层
Post by zlly20


void some_function()
{
     //myArray is local variable...
      double_array myArray[100];
      // some initialization or manipulation of array element
      ......
      // now, save the array into a map
      myMap.insert(make_pair("My Array", myArray);

}// some_function ends here

double_array *myArray = new double_array[100];

ps:不要忘了释放
回复 支持 反对

使用道具 举报

发表于 2005-7-17 01:10:06 | 显示全部楼层
既然用了stl,为什么不用vector?
vector< pair<double, double> >myArray;

如果没有记错, vector应该是保存value 的。——优点是,内存的管理不用你操心了。
vector的destructor自己会把所有的内存释放的;缺点是,myMap.insert实际上有
一个memory copy的动作,会对performance有影响。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-17 13:14:07 | 显示全部楼层
to rickxbx:
你的方法我试了,不管用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-17 13:14:49 | 显示全部楼层
to bookstack:

我试试vector....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-17 14:12:16 | 显示全部楼层
vector也不行...

大哥大姐们帮帮忙
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-17 17:09:10 | 显示全部楼层
to bookstack:
按你说的
我现在的做法是把array 转成 vector.
回复 支持 反对

使用道具 举报

发表于 2005-7-19 20:42:34 | 显示全部楼层
把东西放在堆上就行了,照你那样做就没问题了

btw:
有空了,你可以研究一下boost::multi_array这个库,呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表