如何改变动态数组上下界?

ironwill2004 2008-07-04 10:55:33

double **arrR=new double* [nLatiMax-nLatiMin+1];
for(int i=0;i<nLatiMax-nLatiMin+1;i++)
{
arrR[i]=new double[nLongMax-nLongMin+1];
for(int j=0;j<nLongMax-nLongMin+1;j++)arrR[i][j]=0.0;
}

//收回数组内存
for(int i=0;i<nLatiMax-nLatiMin+1;i++)
{
delete [nLongMax-nLongMin+1]arrR[i];
}
delete [nLatiMax-nLatiMin+1]arrR;
以上代码没问题。
但我想在数组大小不变的情况下,改变数组下界为行nLatiMin到nLatiMax;列为nLongMin到nLongMax;
即:arrR[nLatiMin][nLongMin]访问到第一个元素
该怎么做?
...全文
184 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2008-07-08
  • 打赏
  • 举报
回复
delete [nLongMax-nLongMin+1]arrR[i];
楼主啊,不会你还在用20年前的C++教材吧?
ironwill2004 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hai040 的回复:]
...如果不在意效率的话用map <int, T>
下标自己定
[/Quote]
这个应该能实现,不过无序存储,效率确实是问题。
我要处理的可能是上百万个元素的数组,空间复杂度和时间复杂度当然要考虑!

感谢你的参与。
hai040 2008-07-08
  • 打赏
  • 举报
回复
...如果不在意效率的话用map<int, T>
下标自己定
ironwill2004 2008-07-06
  • 打赏
  • 举报
回复
快来评价,来者有分
ironwill2004 2008-07-06
  • 打赏
  • 举报
回复
我的目的就是使循环内代码更为简单明了,集中心思与算法,而不必经常担心着下标!!

所有说使用vector可以实现的,都不负责任,甚至自己对vector不了解

vector如果要用下标来访问,则第一个元素也必须从0开始
zhangjundriver 2008-07-06
  • 打赏
  • 举报
回复
这种操内存操作本来就要比较麻烦,我觉得你只要根据语言的特性去运用就行了
为什么要避开语言的规则去想另外的方式来操作呢?
这样带来的更多的麻烦,如果按照正常的操作是很简单的...
two_ears 2008-07-06
  • 打赏
  • 举报
回复
看了半天,越看越糊涂,都开始怀疑这是不是C++版了
delete [nLatiMax-nLatiMin+1]arrR;的写法我都没见过
lz说的宏,define arrR[i,j] arrR[i-nLatiMin][j-nLongMin]
这个能用么,呵呵
这个是C++?
[Quote=引用 6 楼 ironwill2004 的回复:]
引用 3 楼 k2eats 的回复:
引用 2 楼 artman 的回复:
不行,
arrR实际上是单维指针(double*)数组.

可以自己封装成类,重载[]完成以上功能!

觉得可以重载 [] 运算符

你们的方法太麻烦!!!

那我还不如用个宏替换呢
define arrR[i,j] arrR[i-nLatiMin][j-nLongMin]

用容器vector实现能否给个简单的例子??
[/Quote]
ironwill2004 2008-07-06
  • 打赏
  • 举报
回复
用容器vector实现能否给个简单的例子??

马上要揭帖,但结果还不满意!
王旺旺旺 2008-07-05
  • 打赏
  • 举报
回复
还是std::vector简单
ironwill2004 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 k2eats 的回复:]
引用 2 楼 artman 的回复:
不行,
arrR实际上是单维指针(double*)数组.

可以自己封装成类,重载[]完成以上功能!

觉得可以重载 [] 运算符
[/Quote]
你们的方法太麻烦!!!

那我还不如用个宏替换呢
define arrR[i,j] arrR[i-nLatiMin][j-nLongMin]

用容器vector实现能否给个简单的例子??
ironwill2004 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 k2eats 的回复:]
引用 2 楼 artman 的回复:
不行,
arrR实际上是单维指针(double*)数组.

可以自己封装成类,重载[]完成以上功能!

觉得可以重载 [] 运算符
[/Quote]
你们的方法太麻烦!!!

那我还不如用个宏替换呢
define arrR[i,j] arrR[i-nLatiMin][j-nLongMin]

用容器vector实现能否给个简单的例子??
dong364 2008-07-05
  • 打赏
  • 举报
回复
使用STL的vector,保证没有你自己考虑来考虑去的后顾之忧
K行天下 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 artman 的回复:]
不行,
arrR实际上是单维指针(double*)数组.

可以自己封装成类,重载[]完成以上功能!
[/Quote]
觉得可以重载 [] 运算符
artman 2008-07-04
  • 打赏
  • 举报
回复
不行,
arrR实际上是单维指针(double*)数组.

可以自己封装成类,重载[]完成以上功能!
FORTUNATE99 2008-07-04
  • 打赏
  • 举报
回复
double **arrR=new double* [nLongMax-nLongMin+1];
for(int i=0;i <nLongMax-nLongMin+1;i++)
{
arrR[i]=new double[nLatiMax-nlatiMin+1];
}

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧