【发布时间】:2021-12-27 02:02:02
【问题描述】:
基本功能:
template <typename T>
T** shifting (T* in, int size, int dist, int pos) {
auto out = new T* [size];
int k = (pos-1) * size/dist;
for (int i{0}; i < size; ++i) {
if (i+k >= size) {
out[i] = &in[k+i-size];
} else {
out[i] = &in[k+i]
}
}
return out;
}
这个函数正在创建一个指针数组 out 指向数组 in 的元素,我想知道是否有更快的内存操作方法,所以我尝试了一些不同的东西。
新功能:
template <typename T>
T** stuff(T* in, int size, int dist, int pos) {
int helper = size/dist;
auto out = new T* [size];
for (int i{0}; i < dist; i++) {
if (pos + i < size) {
memcpy(out + i - pos + dist, in+i*helper, helper * sizeof(T*));
} else {
memcpy(out + i - pos, in+i*helper, helper * sizeof(T*));
}
}
return out;
}
但是,这不是给出地址数组,而是将地址后面的值转换为指针,因此我将元素的值作为指针获取。 仔细检查后,这种行为不应该是其他情况,但我想不出一种让它起作用的方法。
感谢您的帮助。
【问题讨论】:
标签: c++ arrays pointers memory