gpt4 book ai didi

c++ - 引用/值混淆有问题吗?

转载 作者:行者123 更新时间:2023-11-30 00:55:02 26 4
gpt4 key购买 nike

我正在调整一个函数来反转由迭代器 begin 和 end 表示的容器的值。

为什么这样做:

template<class Bi> void reverse(Bi begin, Bi end){
while (begin!= end) {
--end;
if (begin != end)
swap(*begin++, *end);
}
}

但不是这个?

template<class Bi> void reverse(Bi begin, Bi end){
while (begin != end) {
--end;
if (begin != end){
Bi temp = begin;
Bi temp2 = end;
*begin = *temp2;
*end = *temp;
begin++;
}
}
}

这编译得很好,但我一定是误解了关于分配彼此相等的迭代器的一些事情,因为当我去反转一个 vector 时,比如说,值 1 到 5,我最终在第一个中得到 5 到 1 ,但第二个产生值 5、4、3、4、5。我不明白这种行为,这里有什么问题?

最佳答案

您正在混合迭代器和值的概念。在第二种方法中,您复制迭代器,但不复制值:begintemp 引用相同的元素,end 也是如此>temp2。当您执行 *begin = *temp2; 时,第一个元素设置为 5,当您稍后执行 *end=*temp 时,第一个元素(已设置为 5)是复制到最后一个位置,第一个和最后一个位置都是 5

您需要做的是复制,而不是迭代器。

关于c++ - 引用/值混淆有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13105893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com