#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);
。
发布于 2021-02-02 01:49:26
给定iter_swap(v1.begin(), t+9);
,您将交换std::vector
v1
的第一个元素和数组t
的第10个元素。v1
和t
是两个独立的对象。您将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);
发布于 2021-02-02 02:05:26
我已经看过您的代码,输出是正确的,
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.begin
和t+9
时,您将10 in v1
与1 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);
https://stackoverflow.com/questions/66002584
复制相似问题