C++ 如何让模板化的bubbleSort()函数显示已排序的向量?
用于向量的C++ 如何让模板化的bubbleSort()函数显示已排序的向量?,c++,arrays,sorting,vector,C++,Arrays,Sorting,Vector,用于向量的bubblesort()函数无法返回向量的排序版本;有时,如果我在VS中编译和执行代码,调用函数时会出现运行时错误: 表达式:向量下标超出范围 我仔细检查了范围,我觉得还可以;我不确定问题是什么:我确实确定向量是通过引用传递的 #包括 #包括 #包括 #包括 模板 void fillVector(std::vector&vobj,int n); 模板 void displayVector(std::vector和vobj); 模板 void bubbleSort(std::vector
bubblesort()
函数无法返回向量的排序版本;有时,如果我在VS中编译和执行代码,调用函数时会出现运行时错误:
表达式:向量下标超出范围
我仔细检查了范围,我觉得还可以;我不确定问题是什么:我确实确定向量是通过引用传递的
#包括
#包括
#包括
#包括
模板
void fillVector(std::vector&vobj,int n);
模板
void displayVector(std::vector和vobj);
模板
void bubbleSort(std::vector&vobj);
模板
void fillVector(std::vector和vobj,int n)
{
srand((无符号整数)时间(NULL));
对于(int i=0;idisplayLimit)
{
对于(unsigned i=0;i在bubbleSort
例程中,您将j
变量增加了3倍!您不认为这太多了吗
if (vobj[j]>vobj[j++])
应该是
if (vobj[j]>vobj[j+1])
std::swap(vobj[j],vobj[j+1]);
及
应该是
if (vobj[j]>vobj[j+1])
std::swap(vobj[j],vobj[j+1]);
递增一个变量与向其中添加一个变量不同。这些函数都返回void
。无法使排序函数返回一个排序数组。此外,代码似乎使用的是向量,而不是数组。VS调试器将准确地告诉您问题所在。但是,我怀疑if(vobj[j]>vobj[j++]
和交换中的类似用法是问题的原因。我已经仔细检查了范围,对我来说似乎没问题——计算机是说真话的。你只是猜测或使用容易出错的目测代码。此外,发布代码时,从代码中删除注释。我们都知道clarations是这样做的,所以不需要用不必要的注释代码来填充问题。在Visual Studio中,还有一个“重试”选项,专门说要按“重试”调试应用程序。是否这样做?如果这样做,调用堆栈将准确显示问题所在is@PaulMcKenzie是的,我知道我的教授把它们放在那里是为了函数原型;我在这里发布它们的时候,我在和自己争论是否应该删除它们,因为每个函数的功能都很明显;我确实按了重试,但警报保持n给我打电话,我会检查调用堆栈,看看这是否解决了我的问题,但我有一个问题:增加一个变量与增加一个变量不同。
如果增加一个变量j++
(或+++j
)更改变量j
的值,如果将一个变量添加到变量j+1
中,则不会更改变量j
的值。