Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何让模板化的bubbleSort()函数显示已排序的向量?_C++_Arrays_Sorting_Vector - Fatal编程技术网

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
的值。