[英]Dereferencing member pointer
我有一个C ++结构,它具有动态分配的数组作为指针。 我有一个反转数组的函数,但它似乎不起作用(我认为是因为临时变量指向原始值)。
struct s {
int *array;
int length;
...
s(int n) {
this->array = new int[n];
this->length = n;
}
...
void reverse() {
for (int i = 0; i < this->length; i++) {
int n = this->array[i];
this->array[i] = this->array[this->length - i - 1];
this->array[this->length - i - 1] = n;
}
}
...
}
我认为这是在this->array[this->length - i - 1] = this->array[i]
这样数组保持不变并且不会被反转。 我不知道如何尊重数组指针或如何只取n中this->array[i]
的值。
反向操作不起作用的原因是您要遍历整个数组的长度。 您只需要完成一半。 如果您经历了下半场,那么您将无法撤消它。
例如,如果您尝试反转[1, 2, 3, 4]
您将得到
after i = 0: [4, 2, 3, 1]
after i = 1: [4, 3, 2, 1]
--- reversed ---
after i = 2: [4, 2, 3, 1]
after i = 3: [1, 2, 3, 4]
--- back to original ---
相反,只需循环
for (int i = 0; i < this->length / 2; i++) {
...
}
附带说明一下,使用2个索引器将大大简化您的代码:
void reverse()
{
int limit = length / 2;
for ( int front = 0 , back = length - 1; front < limit; front++ , back-- )
{
int n = array[front];
array[front] = array[back];
array[back] = n;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.