You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用std::swap反转vector<int>元素逻辑错误排查求助

问题排查与修正

你的代码逻辑问题出在循环的终止条件上:

当你用i < v.size()作为循环条件时,会遍历整个vector的所有元素。举个例子,假设vector有4个元素(下标0、1、2、3):

  • i=0时,交换下标0和3的元素,此时vector完成了前半部分的第一次交换
  • i=1时,交换下标1和2的元素,此时vector已经被正确反转
  • i=2时,交换下标2和1的元素——这会把刚刚交换好的元素又换回去
  • i=3时,交换下标3和0的元素——再次把最开始交换的元素换回去

最终整个vector相当于没做任何交换,回到了初始状态。

修正后的代码

只需要把循环条件改成遍历到vector的前半部分即可:

#include <vector>
#include <algorithm> // 确保std::swap可用

void rev_vect(std::vector<int>& v) {
    for (int i = 0; i < v.size() / 2; ++i) {
        std::swap(v[i], v[v.size() - 1 - i]);
    }
}

为什么这样可行?

  • 对于长度为偶数的vector,比如4个元素,v.size()/2等于2,循环执行i=0和i=1两次,刚好完成所有元素的配对交换
  • 对于长度为奇数的vector,比如5个元素,v.size()/2等于2(整数除法自动向下取整),循环执行i=0和i=1两次,中间的第3个元素(下标2)不需要交换,完美符合反转逻辑

内容的提问来源于stack exchange,提问作者Abdullah Othman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:32:36