首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iter_swap产生错误结果

iter_swap产生错误结果
EN

Stack Overflow用户
提问于 2021-02-02 01:45:04
回答 2查看 48关注 0票数 1
代码语言:javascript
运行
复制
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void myfunction(int i)
{
    cout<<" "<<i;
};

void multiply(int a)
{
    a*2;
}

int main()
{
     int t[]={10,5,9,6,2,4,7,8,3,1};
    vector<int> v1(t,t+10);
    for_each(v1.begin(),v1.end(),multiply);
    iter_swap(v1.begin(), t+9);
    for_each(v1.begin(),v1.end(),myfunction);
    
    return 0;
}

你好,其实我对这段代码有疑问。

当我运行它时,我看到结果是1 5 9 6 2 4 7 8 3 1,并且我不知道为什么最后一个元素仍然是1,即使我在中间分配了语句iter_swap(v1.begin(), t+9);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-02 01:49:26

给定iter_swap(v1.begin(), t+9);,您将交换std::vector v1的第一个元素和数组t的第10个元素。v1t是两个独立的对象。您将v1的元素打印为for_each(v1.begin(),v1.end(),myfunction);,但是v1的第10个元素没有更改。

你可能想

代码语言:javascript
运行
复制
iter_swap(v1.begin(), v1.end()-1); // swap the 1st and 10th element of v1
for_each(v1.begin(),v1.end(),myfunction);
票数 3
EN

Stack Overflow用户

发布于 2021-02-02 02:05:26

我已经看过您的代码,输出是正确的,

代码语言:javascript
运行
复制
for_each(v1.begin(), v1.end(), multiply); 

上述代码的输出为v1 = 10,5,9,6,2,4,7,8,3,1,t也是相同的t= 10,5,9,6,2,4,7,8,3,1

代码语言:javascript
运行
复制
 iter_swap(v1.begin(), t + 9); 

当您交换v1.begint+9时,您将10 in v11 in t9交换,因此最终输出

代码语言:javascript
运行
复制
1 5 9 6 2 4 7 8 3 1

您可以尝试交换第一个和最后一个元素。

代码语言:javascript
运行
复制
iter_swap(v1.begin(), v1.end()-1); 
for_each(v1.begin(),v1.end(),myfunction);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66002584

复制
相关文章

相似问题

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