首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过迭代器反转向量的元素

通过迭代器反转向量的元素
EN

Stack Overflow用户
提问于 2015-06-15 00:53:52
回答 3查看 59关注 0票数 1

我试着写了以下函数:

代码语言:javascript
复制
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;
 }

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

代码语言:javascript
复制
first = 322, second = 12
After reversing: first = 322, second = 322

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

EN

回答 3

Stack Overflow用户

发布于 2015-06-15 01:00:28

要交换元素,应执行以下操作:

代码语言:javascript
复制
temp = first
first = second // Here you have "second = first". It's the other way around!
second = temp

您在第二步中犯了一个错误,这导致您的reverse操作为这两个步骤都提供了first。关键思想是:您将一个值(first)存储到temp,然后使用以下操作可以覆盖该temp值(first),因为您不会丢失它。

票数 4
EN

Stack Overflow用户

发布于 2015-06-15 00:58:44

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

票数 2
EN

Stack Overflow用户

发布于 2015-06-15 01:15:23

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

代码语言:javascript
复制
int *temp = &*first;

不是保留指向first的指针,而是简单地保留first指向的值:

代码语言:javascript
复制
int temp = *first;

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

代码语言:javascript
复制
*first = *second;

最后,使用保留的值更改second的指针对象:

代码语言:javascript
复制
*second = temp;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30832051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档