由买买提看人间百态

topics

全部话题 - 话题: 数组
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)
X****r
发帖数: 3557
1
数组和指针是两回事。
比如int a[10];定义了一个有10个int元素的数组,sizeof(a) == sizeof(int) * 10
而int *p;定义了一个指向一个int的指针,sizeof(p) == sizeof(int*)
之所以会有数组就是指针的混淆是因为int [10]类型可以自动转换成int *类型,这种
转换被称为array-to-pointer conversion,所有左值(lvalue)表达式作为右值
(rvalue)使用的时候都要经过这种转换,而转换结果就是指向该数组首元素的指针,
所以a的值就相当于&a[0],但是即使赋值p=a也不能认为它们是一回事,比如
&a和&p的类型和值就完全不同,因为这里&a并不是将a当作右值来用所以array-to-
pointer
conversion不适用。
数组的数组就是字面上的意义:一个数组的每个元素都是数组。
比如int a2[5][10];定义了一个有5个int [10]元素的数组,sizeof(a2) ==
sizeof(int [10]) * 5,即sizeof(int) * 10 * 5
而指针数组int... 阅读全帖
d*******n
发帖数: 524
2
【 以下文字转载自 Programming 讨论区 】
发信人: dArtagnan (达达尼昂), 信区: Programming
标 题: C++里面如何最方便的表示这个数组的数组?
发信站: BBS 未名空间站 (Mon Apr 26 22:26:09 2010, 美东)
比如有下面这个数组由3个小数组组成,每个小数组的size是不一样的?
{ {0, 2, 3},
{1, 3, 6, 6},
{2, 5}
}
请问怎么样最方便的表示这个数组的数组并且可以方便的初始化(就是说把这些数都写
到那个数据结构里面去)?
我想要的是类似Java里面的“数组的数组”的东西,java里面的数组是一个class,所以可以有
int[][] twoDimArray = { {0,2,3}, {1,3,6,6}, {2, 5} };
For example, one thing I could do is the following, putting the integers in
a vector>.
q*******i
发帖数: 353
3
来自主题: Programming版 - Java数组怎么样能参数传递 (转载)
【 以下文字转载自 CS 讨论区 】
发信人: qqwuweiyi (娓娓), 信区: CS
标 题: Java数组怎么样能参数传递
发信站: BBS 未名空间站 (Wed Mar 31 22:00:20 2010, 美东)
请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么
弄?
或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b
的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和
数组b的值一样但是地址不一样。
谢谢大家啦,想了很久不知道怎么解决。
d*******n
发帖数: 524
4
比如有下面这个数组由3个小数组组成,每个小数组的size是不一样的?
{ {0, 2, 3},
{1, 3, 6, 6},
{2, 5}
}
请问怎么样最方便的表示这个数组的数组并且可以方便的初始化(就是说把这些数都写
到那个数据结构里面去)?
我想要的是类似Java里面的“数组的数组”的东西,java里面的数组是一个class,所以可以有
int[][] twoDimArray = { {0,2,3}, {1,3,6,6}, {2, 5} };
L*******o
发帖数: 895
5
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这
两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。
分析:这是一道很新颖的关于位运算的面试题。
首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都
出现了两次。请写程序找出这个只出现一次的数字。
我们想到了异或运算的性质:任何一个数字异或它自己都等于0。也就是说,如果我们
从头到尾依次异或数组中的每一个数字,那么最终的结果刚好是那个只出现一次的数字
,因为那些出现两次的数字全部在异或中抵消掉了。
我们回到原始的问题。如果能够把原数组分为两个子数组。在每个子数组中,包含一个
只出现一次的数字,而其他数字都出现两次。如果能够这样拆分原数组,按照前面的办
法就是分别求出这两个只出现一次的数字了。
从头到尾依次异或数组中的每一个数字,那么最终得到的结果就是两个只出现一次的数
字的异或结果。因为其他数字都出现了两次,在异或中全部抵消掉了。由于这两个数字
肯定不一样,那么这个异或结果肯定不为0,也就是说在这个结果数字的二进制表示中
至少就有一位为1。我们在结果数字中找到第一个
q*******i
发帖数: 353
6
请教大家一个问题:Java中,我想让一个数组整个的参数传递而不要地址传递应该怎么
弄?
或者回答这个问题:假设数组a[4][4]={...},数组b[4][4]=a[4][4]的话,那么数组b
的值的地址和数组a中的地址是一样的。我就想要知道,如何建立一个数组b,数组a和
数组b的值一样但是地址不一样。
谢谢大家啦,想了很久不知道怎么解决。
X****r
发帖数: 3557
7
你这个不是二维数组(数组的数组),而是指针数组(指向子数组首元素指针的数组)
,空间效率和时间效率上和二维数组并不等价。
N******K
发帖数: 10202
8
网上搜了搜 没啥合适的库 要么太老了 要么就有大坑 这些库都不能互联互通
所以自己搞一个库 有什么问题自己清楚
本库的目标是
(1)实现新的图像分析算法
(2)充分利用已有的算法:把本库作为一个接口 调用其他各个c++矩阵库和图像算法库
实现步骤:
一维数组是基础 对应的是内存的连续线性存储
数组的一个元素可是一个double也可以是一个double裸数组
然后二维 也就是矩阵 各个元素线性映射(存储)到一维数组
矩阵每一个元素是一个double, float 或 int
不仅仅是存储 而且是有线性计算 定义+ - * /
复杂的运算可以调用eigen或者其他c++库
然后三维 是图像 各个元素线性映射(存储)到一位数组
图像的一个元素(像素)可是一个double也可以是一个double裸数组 或者float int8 等
图像主要实现的是各种计算 比如滤波器
打算一直造到4维数组 图像序列
这个目前要用于存数据 还没想好相关计算
不定义 像素这个类:
(1)如果一个像素是是3double x 3double结构(比如tensor) 那么就存为连续9个
double
定义像... 阅读全帖
x*****g
发帖数: 3463
9
【 以下文字转载自 Programming 讨论区 】
发信人: xlhuang (十里闲情), 信区: Programming
标 题: 求教:多个有序数组怎么合并最快?
发信站: BBS 未名空间站 (Mon Jul 11 09:51:07 2011, 美东)
多个有序数组合并成一个有序数组。各数组长度不同。所有数组的所有元素都是唯一的。
就是说,任何数组中的任何元素与任何其他数组中的任何元素都不会相同。
另外,如果每个元素还带有一个属性,要随着元素移动,怎么办?建个结构?
有没有更好的办法?
谢谢!
X****r
发帖数: 3557
10
来自主题: Programming版 - Java数组怎么样能参数传递 (转载)
循环复制的效率和数组的维数关系不大,主要和数组的总元素个数成正比,除非你的每
个维度都只有一两个元素,而有上百个维度,不然不会效率太低。
当然你可以用一维数组来模拟多维数组。Java的多维数组允许子数组的大小不同。
如果你不用这个特性的话直接用一维数组而自己来算下标也是可以的。
s******e
发帖数: 2181
11
基本道理清楚,数组作为参数传递给函数的只是数组首元素的地址,函数在需要用到后
面元素时再按照这个地址和数组下标去查找。同时,数组名又正好是数组首元素的地址
,所以在主函数里调用子函数时只需写数组名,那么首元素的地址就传出去了。
我的问题来了,如下例,被调用的函数multiply的形参部分,float *p说明p是一个地
址,这个地址就是传过来的数组首元素的地址。既然p只是地址,那后面的操作
p[0]=2*p[0]
p[1]=2*p[1]
p[2]=2*p[2]
...
不是在把地址乘以2吗,怎么就变成把地址里面的内容乘以2了?用*p[...]来操作是不
是更符合情理?而且p既然是一个地址,怎么就可以写成p[...]了呢,这不变成地址数
组了吗?
虽然实际当中都在这样写,但心中的困惑一直都在。我不是专业马工,求专业马工解惑
并轻拍。
main()
{
float num[]={2.0,3.1,8.6,4.1,7.9};
const int size=sizeof(num)/sizeof(int);
multiply(num,size);
...
}
voi... 阅读全帖
j**l
发帖数: 2911
12
这里数组是有序的,也就是重复的元素一定是连续排列的。实际上hash table可以O(n)
时间完成,而且可以对付非有序数组的情形,但是好像很难用到有序这个条件。这里规
定不用hash table。
规定用原数组空间存储删除重复元素后shrink的数组。平凡解法大家应该都能想到。设置两个读写指针(下标)i, j。其中i用于扫描整个数组,j用于写新数组的元素。扫描过程中,如果A[i] == A[j]则跳过,直到找到不同的元素,然后写入并更新j。复杂度也是O(n)。
还有没有更好的方法?想了一下,假如重复元素的那段数比较长,上面方法的线性跳过
可能比较慢。是否可以用改进的binary search(如果有多个元素满足查找要求,返回下
标最大的那个),返回重复元素的最后一个位置,这样就可以log(n)时间跳过那段重复
元素了。
但不清楚这种方法复杂度是多少。假设有k个不同元素,复杂度是k*log(n)么? 是否在
最坏情况下退化为n*log(n)?
还有更好的方法么(不用hash table, 不用新的存储空间)?
n****r
发帖数: 120
13
【 以下文字转载自 Topcoders 俱乐部 】
发信人: nibber (nibber), 信区: Topcoders
标 题: 讨论一道老题:分离数组中的正负数
关键字: 算法 数组 O(n) 时间复杂度分析
发信站: BBS 未名空间站 (Thu Nov 8 10:45:04 2012, 美东)
负数在前,正数在后,需要保持负数之间和正数之间的顺序不变!时间复杂度要求O(n)
,空间复杂度O(1)
下面是我的代码,空间复杂度O(1)没问题,时间复杂度分析如下,
设数组中共有负数X个,分散在K个分离的连续负数的子数组段,每个子数组段的长度为
Li,1<=Li 下面算法中K个分离的负数子数组段移到最后位置需要最多进行K次swap操作,而swap的
时间复杂度是O(n),(这里n是子数段的长度),因此
一共的需要的时间是O(L1)+O(L2)+...+O(Lk) = O(X).因此整体的时间复杂度就是O(n)
这个分析妥不妥?请大牛们给指点一下,还有其他的时间O(n),空间O(1)解法没有?
public static void split(int[] ... 阅读全帖
x*****g
发帖数: 3463
14
多个有序数组合并成一个有序数组。各数组长度不同。所有数组的所有元素都是唯一的。
就是说,任何数组中的任何元素与任何其他数组中的任何元素都不会相同。
另外,如果每个元素还带有一个属性,要随着元素移动,怎么办?建个结构?
有没有更好的办法?
谢谢!
f*******a
发帖数: 663
15
一点思路,抛砖引玉
对于N个有序数组,建立一个临时的大小为N的数组,从每个数组里取第一个元素,排序
后放入。
如下循环:
从临时数组中pop第一个元素输出,同时从原所属数组中取下一个元素,排序后放
入临时数组
l***y
发帖数: 4671
16
。。。 C++ 有真正意义上的多维数组么?记得好像只有一维数组,其它各维都是指向
上一维的一维指针数组。
对了,再请教一下快速初始化大的多维数组为非零值的问题。
第一个问题:数组初始化为 0 可以简单 memset,但是非零值呢?比如说初始化为某个
变量 x 的值。用多重循环是惊人的慢啊。
另一个问题,初始化数组时,如果用 double A[500][500] = {{0}}; 是不是实际执行
的是 memset?貌似这种句式只能设 {{0}},其它的值不管用。
多谢多谢!
l***y
发帖数: 4671
17
能展开讲讲数组的数组么?一直理解为一维数组名本身就是指针,所以数组的数组本身
就是个一维的指针的数组。
刚测过,memset 和多重循环比起来的确是一个数量级,不开 -O3 时差别大约三倍,打
开 -O3 后 loop 比 memset 更快。但是在我的实际 code 里,memset 比 loop 大概要
快两个数量级 -- 天知道怎么回事。。。
double A[1000][1000] = {{0}};
clock_t t_start = -1;
t_start = clock();
for (int ind = 0; ind < 1000; ind++)
for (int i = 0; i < 1000; i++)
for (int j = 0; j < 1000; j++)
A[i][j] = 0;
t_start = clock() - t_start;
printf("Loop takes %f sec; ", t_start/(double)(CLOCKS_PER_SEC));
t_start = cloc... 阅读全帖
i*****t
发帖数: 636
18
来自主题: JobHunting版 - 关于数组size的问题
【 以下文字转载自 Programming 讨论区 】
发信人: iForget (forget), 信区: Programming
标 题: 关于数组size的问题
发信站: BBS 未名空间站 (Wed Feb 17 00:43:17 2010, 美东)
举个简单例子,比如一个function有两个输入,第一个是整数数组,第二个是数组的si
ze,在主程序中调用时数组大小跟数组是一致的,比如
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
但如果不一致,比如上述例子中第二个输入为10,那么怎么在func中check呢?如果无法
check的话应该怎么处理呢?thanks
y**i
发帖数: 1112
19
你举的例子是数组元素个数大于数组取值范围的情况,就比如说如果数组的最后一个值
不是5而是1000,那hash表也只需要存1,2,3,4,1000吗?那这样的话,要么1000是
存在数组下标为1000的地方,要么紧接着4的后面存,如果是后者,那下次再遇到1000
的时候怎么定位呢?如果从头再查找一边的话,那就不是O(1)的查找时间了吧?我就是
这里不太明白。如果是前者,我知道的是可以取余数(或者乘法等)来定位,比如所有
数都余100,那么1000实际上是存在数组下标10的位置,这样就需要拉链法来解决碰撞
问题了。动态增长空间我大概明白的,大概就是每次的size不够了的话动态分配两倍
size的空间。
a****s
发帖数: 559
20
一般传指针和长度两个参数。
void func(int a[], size_t len)
调用时,数组参数decay成int*指针。
如果要在函数里保留参数的数组特性,
可以传array by reference
void func( int (& a)[10] )
或者传array by pointer
void func( int (* a)[10] )
限制是:数组size需要明确定义。
如果要从函数返回数组,同样
可以return by reference
int (& func())[10]
也可以return by pointer
int (* func())[10]
同样限制,需要明确定义数组size。
r****e
发帖数: 10
21
m应该在0-n/2的范围,用一个额外的n/2的数组。扫描一遍原数组,数值比n/2大的在额
外数组的[n/2-1]++,其它的对应的[v-1]++.然后倒序扫描额外数组,值比其索引大的第
一个就是答案。
q*******i
发帖数: 353
22
还真是这个办法对,但是好像太麻烦,如果数组维数高之后,有没有办法更方便拷贝.
同时更改拷贝之后的数组不会影响原来数组的值?我试了一下system.arraycopy,改变
函数中数组的值原来数组的值也会改变
t****t
发帖数: 6806
23
来自主题: Programming版 - Java数组怎么样能参数传递 (转载)
唉, 我不会java都看明白了
copy一维数组, 用copyblahblah method
copy二维数组, 用一重循环加copyblahblah method, 因为二维数组是一维数组的一维
数组
f*******a
发帖数: 663
24
整体型的处理思路,很有意思。简而言之,不断的把单个数组插入至待输出的数组中。
个人感觉:随着数组数量的增加,这种算法的效率会随着长度的增加而降低。
另:关于我的算法的比较次数,好像有点问题。满打满算,15个元素,每次进入临时数
组,比较的就3个元素,只要比两次,最大15×2+第一次排序时的比较,不会超过40.如
果考虑数组被清空以及最后一个数组的情况,比较次数会更少。大致估计,这个算法的
运算量是O(logN * 总元素量)
~~~~有序插入

比较;
w***g
发帖数: 5958
25
楼上说的都好,我来总结以下吧。
1. 如果每个数组只允许顺序操作的话,那用heap在复杂度上来说是最低的。
2. 如果是面试题,显然要考虑外排序的情况。这时候就要考虑block size和K的优化。
在外拍情况下每次需要从数组读取一整个block, 用完了再读一整个。 这样内存中最多
可能同时存在K个block。 block size = mem size / K。这个如果太小了就不能发挥顺
序读取的优势。 这时候就得merge sort了。 比如有8GB内存,K = 10000,那么每个
block也就0.8MB。这样显然不能发挥顺序读取的优势。这时候就可以进行100路merge排
序。这样虽然每块数据要多读写一次,但是block size变成了80MB,throughput会比0.
8MB多不止两倍。当然区别也不大,但K更大时merge就是必须的了。(100路merge还是用
heap实现)。
3. N 路merge的话每个数据需要被读写logK/logN次。N大约等于内存大小/100MB,然后
视具数值调整。
4. 一个罗嗦的情况是各个数组不是random的。比如说一个数组整个都... 阅读全帖
t****t
发帖数: 6806
26
理论上来说, 只有数组这一种东西, 也就是你理解的"一维"数组. 但是除了指针数组以
外, 也有数组的数组. 这两个东西完全不同, 但是引用起来都是x[i][j]这样的写法.
多重循环不知道有什么慢的, memset其实本质上也是循环, 或许有利用CPU指令的优化,
但是数量级上并无区别.
只能设0. 如果不设0则不能省略.
j**l
发帖数: 2911
27
如果两个有序数组等长,假定都为n, 则log(n)时间找median的解法已经被讨论过很多
次了。
如果有序数组A的长度为m, 有序数组B的长度为n, 如何找log(m + n)的解法?
有人说可以padding短数组,那么padding的策略是什么?
padding是否用到了额外的空间?有没有其它方法不用额外空间,复杂度还是log(m + n
)?
K******g
发帖数: 1870
28
没有这么复杂吧?大家看这样做有没有问题?
条件 T={连续和小于或等于S}
假设数组是A,长度为N, L(k)表示从A[k]往前推,符合条件T的子数组的长度, s(k)是子数组的
总和。同时保持一个指针P指向该子数组的起始点。
如果s(k-1)+A[k] > S, 则指针P往前移x步使得s(k-1)+A[k]<=S, L(k) = L(k-1)+1-x.
如果s(k-1)+A[k] <= S, 则L(k) = L(k-1)
最后,遍历L,找出最大的长度。
如果要首尾相接的话,那就不在k=N的时候stop,一直到P越过了a[N-1],然后就stop。
Complexity是O(N)还是O(N^2),有更好的解吗?
l****o
发帖数: 135
29
来自主题: JobHunting版 - merge两个有序数组
一般来说,如果合并两个有序数组,合并后的数组应该怎么返回?
1.覆盖其中一个数组A和m (假设A足够大)
void mergeArray(int A[], int m, int B[], int n)
2.用第三个数组返回
void mergeArray(int A[], int m, int B[], int n, int C[], int k)
3.返回整数指针指向使用malloc分配的int* (容易造成内存泄露?)
int* mergeArray(int A[], int m, int B[], int n)
4.使用vector
void mergeArray(const vector& A, const vector& B, vector& C)
大家如果面试时候要求写代码,一般写哪一种?
y****n
发帖数: 743
30
是用C#写的,下午忙着去开会,没写思路。
1. 如果某数字m出现,则在原数组的第m个元素作标记。
标记的方式:该元素的值减去数组总长度(count)。这样被标记过的元素一定是负数
,并且可以恢复其原值(+count即可)。
2. 时间优化,能用一重循环则不用二重循环。
3. 运算结束时,恢复原数组全部数据,保持原顺序。
4. 同时考虑到算有运算不会有整数溢出情况。
5. 正常项目当然不会这样写代码,都是那个空间O(1)要求的。
我运转了一下test case{ 1, 1},我的代码没有数组越界呀?
在正式的面试中,一重循环O(n),还是比二重循环O(n^2)有明显优势的。
z********5
发帖数: 176
31
来自主题: JobHunting版 - 再问一道数组题
空间不限的话就好办了,建一个足够大的数组A(或者查一遍给定的数组,看最大多大
),A中元素全为0,用你给的数组里面的元素做A的index,遍历一遍给定的数组,把存
在的元素对应的A中的位置的元素变成1。 然后只要查一遍A里面最小的连续的0是多少
个就好了。 这是3n的复杂度,应该也算是O(n)了吧…… 不知道对不对
Y********f
发帖数: 410
32
来自主题: JobHunting版 - 二维数组问题
面试题中经常要用到二维数组,但是又不能简单的用一个new来创建二维数组,我知道
的大概有这三种:
1. 用一维数组代替二维数组 A(i, j) = arr[i * N + j]
2. careercup 150道里面提到new int[M * N + M], 然后把前面M个设定为指向一维数
组的指针。
3. vector tempVect(N); vector> vect(m, tempVect);
但是用起来都很别扭,大家有什么好的方法?
n****r
发帖数: 120
33
这道题是偶考古出来的F家面试题,没有原题,懊恼。
http://www.mitbbs.com/article_t0/JobHunting/32165741.html
题目:给一个数组和一个key,找出sum不小于key的数目最少的子数组
我开始说用一个priority queue,复杂度是O(n lg k),被提示可以用快速排序的
partition。
如果要求子数组连续的话YooY的two pointers思路应该可以,程序正确性我要再看看,
有负数的case处理应该是不行的。
等 xiaoxiaowww (笑笑)的解法!
T******e
发帖数: 157
34
用一个bool数组表示visited or unvisited,从index0开始跳,每次跳都把node标成
visited,并且计数,如果跳回了其它visited的节点,说明是环,记录长度,如果下一
次跳回的visited的节点是自己则说明不存在环,每次重新跳的时候,都遍历bool数组
选择下一个没有visited的节点开始。
因为数字都不同的,所以不会出现多对一的情况。
如果不想用bool数组,可以用把数组中的值改成负值的方法标记,但要注意0的处理。
这样的复杂度估计是O(n^2)求大神更好解法。
刚才想了想其实起点是哪个不重要,每次重新跳的时候可以直接从下一个unvisited节
点开始,如果到头了发现还有没访问的点,就从头开始,这样或许能快些
T******e
发帖数: 157
35
用一个bool数组表示visited or unvisited,从index0开始跳,每次跳都把node标成
visited,并且计数,如果跳回了其它visited的节点,说明是环,记录长度,如果下一
次跳回的visited的节点是自己则说明不存在环,每次重新跳的时候,都遍历bool数组
选择下一个没有visited的节点开始。
因为数字都不同的,所以不会出现多对一的情况。
如果不想用bool数组,可以用把数组中的值改成负值的方法标记,但要注意0的处理。
这样的复杂度估计是O(n^2)求大神更好解法。
刚才想了想其实起点是哪个不重要,每次重新跳的时候可以直接从下一个unvisited节
点开始,如果到头了发现还有没访问的点,就从头开始,这样或许能快些
k***g
发帖数: 166
36
LCS是不错的想法,不过为了简化问题,我已经假设数组都是排了序的,直接两个指针
向前移动就行了吧?
主要是不太清楚怎样处理多个数组的情况
比如A,B,C,D,E,F... 我的想法是搞两个vector,一个存两个数组名字,比如A,B或者C,
F,另一个存相同元素数量。但这样复杂度是O(m^2) (m是数组数量)
还有更好的办法吗?
t*********3
发帖数: 87
37
多谢评论,我确实在“学点基础知识”,没有“光闷头刷题”,所以我才来问问题。如
果我只想刷题,我就没必要来问了。你的态度虽傲慢但并不重要,因为我只是想问问题
而已。
我看有人说variable length array cannot be initialized by any form of
initialization syntax. 因为C11里面说The type of the entity to be initialized
shall be an array of unknown size or a complete object type that is not a
variable length array type.
总之他的意思就是说int a[n] = {0} 其中的 “={0}” 这种写法不能用到变长数组。
但是他这只是告诉我结论,我还是不明白问什么不能这么写。
你说变长数组不能“在compile time 初始化”。你的意思是“={0}” 其实就是在
compile time初始化吗?为什么run time不可以这么做呢?run time时已经知道了数组
的siz... 阅读全帖
b******y
发帖数: 9224
38
来自主题: Java版 - java如何keep大数组在内存中?

系统启动的时候,会将这个数组掉到内存里,就是initialize一下。但如果系统待命的
时间一长了,用户使用系统的时候,程序会再次调用这个数组,这个时候就发现系统会
很明显的慢一下。所以,可以肯定是因为操作系统把这个数组的内存区置换成了其他程
序的东西了。也就是被page out了。但,稍稍等一下后,系统反应又正常了。
就是说,不断load程序用到这个数组的时候,没事儿。但一旦中间间隔长了,程序空转
,没有用户使用,再次用到程序,就会有这个现象。
n****n
发帖数: 101
39
请问,有若干个(比如3个)已经按升序排序好了的数组(数组长度可以一样,但也可
能不一样),那么现如何用最简洁、快速方法,将这3个数组合并到一起,仍然按升序?
注意,数组之间可能有想等的数据。
以前学过一个合并排序,但忘记如何操作了。
w****h
发帖数: 212
40
我知道二维数组,但是我的那个程序使用一位数组更方便操作。
二维比较麻烦,而且各flow数组长度不一样,虽然c#可以定义不等长二维数组
i****d
发帖数: 255
41
来自主题: Programming版 - 在C/Fortran之间传递2维数组
问题:
在C中定义一个二维数组的指针 double **zzz,动态分配其空间.希望传递
zzz到一个Fortran 77子程序中操作,如何实现?
多谢!
附我的理解和尝试
1)如果zzz本身是一个静态二维数组,比如 zzz[5][3], 我们知道可以用
fsub_(zzz[][3])
传递,没有问题.
2) 我的问题中zzz所指的二维数组有一维的长度是固定的,比如说3.我试了用

fsub_(zzz[][3])
不成功.
3) 查了一些网上的例子. 有在Fortran中动态分配数组然后传回C的,但没有和我类似的
例子.
b***y
发帖数: 2799
42
☆─────────────────────────────────────☆
nissan (Go! Milan!) 于 (Fri Mar 14 02:18:16 2008) 提到:
☆─────────────────────────────────────☆
nissan (Go! Milan!) 于 (Sun Mar 16 17:38:18 2008) 提到:
没有人回答吗?
有人说“不是。因为你可以随机访问数组。”
那么,heap难道不可以存储为数组吗,不可以随机访问吗?
如果heap不是存储为数组、随机访问,那么存储为什么呢?
☆─────────────────────────────────────☆
skatou (skatou) 于 (Mon Mar 17 13:21:16 2008) 提到:
你说的heap是priority queue么?是的话可以存成数组啊,因为priority是一个完全
二叉树(是不是这样叫的?-_-)
stl里面有对应的,make_heap,is_heap之类

☆───────────────────────
b***y
发帖数: 2799
43
来自主题: Programming版 - [合集] [求助]C程序数组的问题
☆─────────────────────────────────────☆
congeal (拉呒拉) 于 (Fri Sep 2 11:42:10 2005) 提到:
原来的程序是用 #define 把数组的长度预先定义好了,
然后在结构中直接用这个长度声明数组。现在想改写这
个程序,让数组长度从命令行读入,然后动态分配空间。
问题是改过之后,程序的执行效率显著下降。相同的
simulation从原来的一次2秒涨到4秒。显然是不可以
接受的结果。
请问有什么好办法来定义动态长度数组么?又快又节省
时间的??谢谢先了。。。
☆─────────────────────────────────────☆
NeverLearn (root 4 Montoya) 于 (Fri Sep 2 14:11:02 2005) 提到:

莫非你在循环里面执行了动态分配?想办法尽可能把这些分配外提吧。
☆─────────────────────────────────────☆
congeal (拉呒拉) 于 (Fri Sep 2 15:45:42 2005) 提
i*****t
发帖数: 636
44
来自主题: Programming版 - 关于数组size的问题
举个简单例子,比如一个function有两个输入,第一个是整数数组,第二个是数组的si
ze,在主程序中调用时数组大小跟数组是一致的,比如
int arr[5] = {1, 2, 3, 4, 5};
func(arr, 5);
但如果不一致,比如上述例子中第二个输入为10,那么怎么在func中check呢?如果无法
check的话应该怎么处理呢?thanks
q*******i
发帖数: 353
45
来自主题: Programming版 - Java数组怎么样能参数传递 (转载)
我是先把数组拷贝(比如把数组a copy 给b),然后把b整个数组作为参数传递到函数
中,在函数内数组b的值被修改了,于此同时函数外a的值也被自动修改了(因为是地址
拷贝),但是我希望保持a不变,怎么操作?
d*******n
发帖数: 524
46
我运行了下面的code
void f(int a[]) {
cout << "inside f:" << sizeof a << endl;
}
int main() {

int a[] = {2,3,4,5,6,7,8,9};
cout << "outside: " << sizeof a << endl;
f(a);
char e;
cin >> e;
return 0;
}
发现输出是:
outside: 32
inside f:4
也就是说在f内部用sizeof的话得到不是这个数组的size
那么在数组内部如何得到数组的size呢?
b***i
发帖数: 3043
47
楼主问多维数组,他总有一天会用到几个维的大小都是动态的数组。指针的数组可以完
成动态分配多维数组,否则只有一维可以变大小。
另一个办法是用vector。
d****i
发帖数: 4809
48
说得对,就是这种方式比直接用二维数组作为参数要灵活,直接用二维数组作为形参的
话,就只能把第二维固定的二维数组来传递:
void addMatrix(int a[][NUM_COL], int b[][NUM_COL], int row)
{
for(i=0;i for(j=0;j a[i][j] += b[i][j];
}
L*******r
发帖数: 310
49
是新手,最近想编一个模拟三国杀的游戏低端版本的程序来练练手。
刚开工不久就遇到一个问题:
之前已经建了一个关于牌的各种属性的class
然后在main.cpp里 创建一组这个card属性的常数数组。也就是建好了两幅牌。
今天想再建一个关于游戏选手的class 时,就遇到一个问题不知到怎么解
决了:
当class wujiang 里面想调用那两副牌的数据时没法调用到的(因为数据只在main.cpp
里,wujiang.cpp里面没定义这样的数组),所以肯定通不过编译。
板上各位高手能否指点下,如何解决这个问题?
我的想法是不把常数数组建立在main.cpp里,可否根据原来的创建一个存放这
个常数数组的文件(存放两幅牌的文件),然后创建class wujiang时能引用一下这个
文件?
这个是否可行,如何操作?
谢谢
b********e
发帖数: 109
50
来自主题: Computation版 - Fortran中数组可以多大?
Fortran中静态数组好像有限制,一维数组好像可以有大约2000多个元素,而二维静态数
组也就是1300×1300左右。有没有什么办法可以开大些的静态数组?
另外动态数组有大小限制吗?
谢谢!!
1 2 3 4 5 6 7 8 9 10 下页 末页 (共10页)