【发布时间】:2013-10-12 23:23:35
【问题描述】:
我在学校作业中遇到了一些问题,我们假设我们要创建自己的迭代器并使用它来反转数组中的元素。 如果它只是单指针,我想我会管理它,但这是双指针并且令人困惑......
下面是逆向代码:
void reverse(T start, T end)
{
T temp = start;
while(start < end)
{
*temp = *start;
*start = *end;
*end = *temp;
++start;
--end;
}
}
这就是问题所在,因为当我将temp 指向start 时,temp 会得到start 的值和地址。但是当我将start 指向end 时,那么start AND temp 自然变化。
我这辈子都不知道如何解决这个问题......
这是我在 main 中的调用:
int a[5] = {5, 12, 1, 6, 9};
Itterfunctions<int*> itt;
int *b = a;
itt.reverse(b, b+4);
for (int i = 0; i < 5; i++)
{
cout<<a[i]<<" ";
}
【问题讨论】:
-
您想复制临时字符。
char temp = *start; -
另外,
int *可能在Itterfunctions<int*> itt;中不需要 -
临时点总是开始,这意味着每次你分配一些东西给临时你都会改变开始。我会将 temp 设为 int 而不是指针。
-
我从不给 temp 分配任何东西,除了开始。它必须是一个指针,因为它应该是通用的,所以我可以用我的逆向器处理各种事情。
-
last应该是比end更好的名字,end通常指的是一个迭代器,它指向最后一个元素之后的“无效”数据。
标签: c++ arrays pointers double reverse