iter_swap 产生了错误的结果

iter_swap yields wrong result

#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);.

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

你可能想要

iter_swap(v1.begin(), v1.end()-1); // swap the 1st and 10th element of v1
for_each(v1.begin(),v1.end(),myfunction);

我查看了你的代码,输出是正确的,

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

 iter_swap(v1.begin(), t + 9); 

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

1 5 9 6 2 4 7 8 3 1

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

iter_swap(v1.begin(), v1.end()-1); 
for_each(v1.begin(),v1.end(),myfunction);