如何让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
相关产品推荐
相关产品推荐

