通过迭代器

时间:2015-06-14 16:53:52

标签: c++ copy

我尝试编写以下函数:

typedef std::vector<int>::iterator v_itt;

 void reverse(v_itt first, v_itt second)
 {
         std::cout << "first = " << *first << ", second = " << *second << std::endl;
         int *temp = &*first;
         *second = *first;
         *first = *temp;
         std::cout << "After reversing: first = " << *first << ", second = " << *second << std::endl;
 }

但是当我试图调用它时,我得到了以下输出:

first = 322, second = 12
After reversing: first = 322, second = 322

我想,当我们用另一个指针初始化一个指针时,在初始化指针中我们只得到一个值的副本。这不是真的吗?

3 个答案:

答案 0 :(得分:4)

要交换元素,您应该这样做:

temp = first
first = second // Here you have "second = first". It's the other way around!
second = temp

您在第二步中犯了一个错误,导致您的reverse操作同时为first提供first。关键的想法是:您将值(first)存储到temp,然后通过以下操作,您可以覆盖那个值(if(isset($_POST['ipaddress']) and $_POST['ipaddress'] != '')),因为您赢了失去它。

答案 1 :(得分:2)

int *temp = &*first;为什么使用指针,你应该存储first指向交换的值。当您使用另一个指针初始化指针时,您将获得该指针的副本,而不是指针指向的值。

答案 2 :(得分:1)

目前,您的代码以冗余的语法形式保留整数:

int *temp = &*first;

不是将指针保留在第一位,而是保留首先指向的值:

int temp = *first;

现在,由于您保留了first的指针,您可以修改指针:

*first = *second;

最后,使用保留的值来更改第二个的指针:

*second = temp;