C++で単純なバブルソートを行う必要があり、std :: vectorの使い方を知りたい。しかし、私はこのプログラムを実行すると、私はこのエラーが発生しました...範囲外のベクトル下付き文字エラー、C++、バブルソート
なぜ私は私の反復が範囲外にないと思うので...私は理解していない。
#include <iostream>
#include <vector>
using namespace std;
void triABulle(vector<int>&, int, int);
void echanger(vector<int>&, int, int);
void affiche(vector<int>&);
int main() {
vector<int> tab = { 3, 4, 56, 3, 2, 5, 64, 3453, 34 };
affiche(tab);
triABulle(tab, 0, tab.size());
cin.get();
return 0;
}
void triABulle(vector<int>& tab, int begin, int end) {
for (size_t i = 1; i <= end-begin; i++)
{
for (size_t j = end; j >= begin+i; j--)
{
if (tab[j] < tab[j-1])
{
echanger(tab, j, j-1);
cout << "SWAP!" << endl;
affiche(tab);
}
}
}
}
void echanger(vector<int>& tab, int i, int j) {
int tmp = tab[i];
tab[i] = tab[j];
tab[j] = tmp;
}
void affiche(vector<int>& tab) {
for (size_t i = 0; i < tab.size() ; i++)
{
cout << tab[i] << ' ';
}
cout << endl;
}
'私は'末端ある場合=エンドbegin'を< - タブ[エンド開始]は 'の端を越えて一つの要素である'ように、アレイ内のbegin'要素は、それらが0によってインデックス付けされますベクター。例えば。 'end-begin'が1の場合、' tab [0] 'は配列内の唯一の要素です。しかし、 '<='を使用しているので、 'tab [1]'にアクセスしようとします。 – kfsone