【发布时间】:2016-05-23 06:28:32
【问题描述】:
我正在尝试编写一个冒泡排序的实现,它是一个模板函数。
当我用一个常规的 ol' 数组测试这个算法时,它似乎工作得很好。我得到了正确的输出。
但是,当我使用向量对其进行测试时,我得到了一个 length_error 异常,我不确定为什么。
template<class T>
void swap_right(T a[], int index)
{
T temp = a[index];
a[index] = a[index+1];
a[index+1] = temp;
}
template<class T>
void bubbleSort(T a[], int size)
{
for(int i = 0; i < size; ++i)
{
for(int j = 0; j < (size-i); ++j)
{
if(a[j] > a[j+1])
{
swap_right(a, j);
}
}
}
}
#include <iostream>
#include <vector>
int main(int argc, const char * argv[])
{
std::vector<int> v {9, 5, 3, 7, 4, 1};
bubbleSort(&v, 6);
for(int i = 0; i < 6; ++i)
{
std::cout << v[i] << std::endl;
}
return 0;
}
【问题讨论】:
-
bubbleSort(v.data(), 6);你传递的是一个指向向量本身的指针,而不是它的内容。 -
我建议让您的函数接受
std::vector<T>&而不是T[]。我还建议使用std::swap而不是自定义版本。 -
仔细看看这个
j+1。它会一直有效吗?检查 size==1。 -
顺便说一句,我建议使用迭代器——这样你就可以传递从到到的范围,并让它们与其他算法轻松交互。
标签: c++ algorithm sorting vector bubble-sort