我正在将一个Android应用程序(java)移植到ios应用程序。它的一部分是实时显示图。
我使用此代码将值插入数组的索引0:
public double[] points;
.....
//Clear array value at first index
System.arraycopy(points, 0, points, 1, points.length - 1);
//Add new value to first index
points[0] = sample;
对此有疑问,但对我的情况没有用。
我可以使用NSMutableArray和NSNumber来获取结果,但它需要更多的代码然后CPU
答案 0 :(得分:2)
在C中,最初会做:
size_t n_points = 512;
double *points = calloc(512, sizeof(double));
然后逻辑是:
memmove(points + 1, points, n_points - 1);
*points = sample;
虽然更好的方法是使用环形缓冲区 - 所以不要移动缓冲区周围的值,只需移动被认为是开头的索引:
size_t n_points = 512;
double *points = calloc(512, sizeof(double));
ssize_t beginning = 0;
if (--beginning < 0) {
beginning += n_points;
}
points[beginning] = sample;
然后在绘图代码中:
ssize_t idx, i;
for (idx = beginning, i = 0;
i < n_points;
i ++, idx = (idx + 1) % n_points)
{
// i runs from 0 ... n_points - 1
set_pixel(i, points[idx], black);
}
答案 1 :(得分:0)
在 C ++ 中,我很想用std::vector
代替Java
数组:
#include <vector>
#include <iostream>
int main()
{
struct point
{
int x, y;
point(int x, int y): x(x), y(y) {}
};
std::vector<point> points;
point sample {2, 7};
points.insert(points.begin(), sample); // insert at beginning
points.insert(points.begin(), {9, 3});
points.insert(points.begin(), {4, 8});
points.push_back(sample); // insert at end
for(auto p: points)
std::cout << "{" << p.x << ", " << p.y << "}" << '\n';
}
如果您执行批次,如果在开头插入std::deque
可能值得一看。
答案 2 :(得分:0)
在Objective-C中,您可以使用NSMutableArray方法在索引0处插入项目。
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
答案 3 :(得分:0)
通过快速Google搜索,System.arrayCopy()看起来像是将源数组的子集复制到目标数组中。
听起来您希望新阵列成为NSMutableArray,并且想要使用
- insertObjects:atIndexes:
。该方法将NSIndexSet作为输入。您可以使用NSIndexSet方法indexSetWithIndexesInRange
从一系列索引创建索引集。