0

私は、intのベクトルをソートし、再帰関数に渡して要素が隣接していることを確認し、同じ場合は削除することで重複を削除するプログラムに取り組んでいます。これが私のコードです:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void checkNum(vector<int> &v, int n)
{
    int i = n;
    if (v[i] == '\0')
    {
        cout << "No duplicates found." << endl;
    }
    if (v[i]==v[i+1])
    {
        v.erase(v.begin()+i);
        /*return 1 + */checkNum(v, n);
    }
    else
    {
        n++;
        /*return 0 + */checkNum(v, n);
    }
    int k;
    cout << "Sorted values, no duplicates: " << endl;
    for (k=0; k< v.size(); k++)
        cout << v[k] << " ";
    //return 0;
}

int main()
{
    vector<int> numbers;
    cout << "Please enter numbers, 0 to quit: " << endl;
    bool more = true;
    while (more)
    {
        int num;
        cin >> num;
        if (num == 0)
            more = false;
        else
            numbers.push_back(num);
    }
    sort(numbers.begin(),numbers.end());
    cout << "The sorted values are: " << endl;
    int i;
    for (i = 0; i < numbers.size(); i++)
        cout << numbers[i] << " ";
    checkNum(numbers, 0);
    system("pause");
    return 0;
}

ここでの問題は、実行時に値を入力した後に次のエラーが発生することです。

Debug Assertion Failed!
Program: C:\Windows\system32\MSVCP110D.dll File: d:\program files (x86)\microsoft visual studio 11.0\vc\include\vector Line: 1140
Expression: vector subscript out of range

また、動作時に複数回印刷されますが、私はそれについてあまり心配していません. バグはどこ?誰でも私を助けることができますか?

アップデート:

私が現在実行しているコードは次のとおりです。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int checkNum(vector<int> &v, int n)
{
int i = n;
if (i == v.size())
{
    cout << "No duplicates found." << endl;
    return 0;
}
if (v[i]==v[i+1])
{
    v.erase(v.begin()+i);
    return checkNum(v, n);
}
else
{
    n++;
    return checkNum(v, n);
}

int k;
cout << "Sorted values, no duplicates: " << endl;
for (k=0; k< v.size(); k++)
    cout << v[k] << " " << endl;
return 0;
}

int main()
{
vector<int> numbers;
cout << "Please enter numbers, 0 to quit: " << endl;
bool more = true;
while (more)
{
    int num;
    cin >> num;
    if (num == 0)
        more = false;
    else
        numbers.push_back(num);
}
sort(numbers.begin(),numbers.end());
cout << "The sorted values are: " << endl;
int i;
for (i = 0; i < numbers.size(); i++)
    cout << numbers[i] << " ";
checkNum(numbers, 0);
system("pause");
return 0;
}

n/i のサイズがリストのサイズに達するまで、大したことではないように重複を削除していました。次に、上記のエラーメッセージが表示されます。どうすれば修正できますか?

4

2 に答える 2