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

如何让C++函数修改外部创建的vector?代码问题求助

问题原因

你当前的BubbleSort函数对vector<int>参数使用的是传值传递——函数执行时会创建原vector的副本,所有排序操作都只在这个副本上进行,main函数里的原vector完全不受影响,自然看不到元素变化。

修复方案

把函数的vector参数改成引用传递,让函数直接操作原vector的内存空间。只需修改函数声明和定义里的参数部分,将vector<int>改为vector<int>&即可。

修改后的完整代码
#include <iostream>
#include <vector>
using namespace std;

// 函数声明改为引用传递
int BubbleSort(vector<int>&, int);

int main(){

    vector<int> lista_y2 {1, 2, 0};
    cout << BubbleSort(lista_y2, lista_y2.size()) << endl;
    cout << lista_y2[0] << lista_y2[1] << lista_y2[2] << endl;
    
    
    return 0;
}

// 函数定义也改为引用传递
int BubbleSort(vector<int>& lista_y2, int m){
    int swaps{0};
    for (int fim {m-1}; fim >= 0; fim--){
        for (int inicio {0}; inicio < fim; inicio++){
            if (lista_y2[inicio] > lista_y2[inicio+1]){
                lista_y2[inicio] = lista_y2[inicio+1] + lista_y2[inicio];
                lista_y2[inicio+1] = lista_y2[inicio] - lista_y2[inicio+1];
                lista_y2[inicio] = lista_y2[inicio] - lista_y2[inicio+1];
                swaps++;
            }
        }
    }
    return swaps;
}
关键改动说明
  • 在函数声明和定义中,将vector<int> lista_y2改为vector<int>& lista_y2,这里的&表示引用,意味着函数接收的是原vector的别名而非副本。
  • 这样函数内部对lista_y2的所有修改都会直接作用到main函数中的原vector上,排序完成后main里的向量就会呈现排序后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:40:00