Функция bubblesort()
, которую я имею для своего вектора, не может вернуть отсортированную версию вектора; бывают случаи, когда если я компилирую и выполняю код в VS, это вызывает ошибку времени выполнения при вызове функции:
Выражение: векторный индекс выходит за пределы диапазона
Я дважды проверил диапазон, и мне кажется, что все в порядке; Я не уверен, в чем проблема: я удостоверился, что вектор был передан по ссылке.
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
template <class T>
void fillVector(std::vector<T>& vobj, int n);
template <class T>
void displayVector(std::vector<T>& vobj);
template <class T>
void bubbleSort(std::vector<T>& vobj);
template <class T>
void fillVector(std::vector<T>& vobj, int n)
{
srand((unsigned int)time(NULL));
for (int i=0; i<n; ++i)
{
vobj.push_back(rand());
}
}
template <class T>
void displayVector(std::vector<T>& vobj)
{
const unsigned displayLimit = 10;
if (vobj.size()>displayLimit)
{
for (unsigned i=0; i<displayLimit; ++i)
{
std::cout << " " << vobj[i];
}
std::cout << " ..." << std::endl;
}
else
{
for (unsigned i = 0; i < vobj.size(); ++i)
{
std::cout << vobj[i] << " ";
}
}
}
template <class T>
void bubbleSort(std::vector<T>& vobj)
{
bool swapped = true;
for (unsigned i=0; swapped && i<vobj.size()-1; ++i)
{
swapped = false;
for (unsigned j=0; j<vobj.size()-1-i; ++j)
{
if (vobj[j]>vobj[j++])
{
swapped = true;
std::swap(vobj[j],vobj[j++]);
}
}
}
}
int main()
{
std::vector<int> vobj;
std::cout << "Enter # of objects you'd like to store in the vector object: ";
int n;
std::cin >> n;
std::cout << "\n*** Calling fillVector(...) ***" << std::endl;
fillVector(vobj,n);
std::cout << "\n*** Calling displayVector(...) ***" << std::endl;
std::cout << "Vector object contains " << n << " value(s) which are" << std::endl;
displayVector(vobj);
std::cout << "\n*** Calling bubbleSort(...) ***" << std::endl;
bubbleSort(vobj);
displayVector(vobj);
}