矢量给出不准确的输出

时间:2014-05-19 23:59:19

标签: c++ vector

vector<int> vect;
vector<int> sorted;

vect.push_back(5);
vect.push_back(3);
vect.push_back(7);
vect.push_back(2);
vect.push_back(9);
vect.push_back(6);

//Print vector elements
for (int x=0; x<vect.size(); x++)
    cout <<  vect[x] << endl;

int min = 99999, idx=0;    
while (vect.size() > 0)
{
    for (int x=0; x<vect.size(); x++)
    {
        if (vect[x] < min)
        {
            min = vect[x];
            idx = x;
        }
    }
    cout << "Min index: " << idx << endl;
    sorted.push_back(vect[idx]);
    vect.erase(vect.begin()+idx);        
}   
for (int x=0; x<sorted.size(); x++)
    cout <<  sorted[x] << endl;   

我想通过将排序的数字存储到vector<int> sorted来对整数向量进行排序。但程序总是在遇到一些未知的程序错误后中途终止。

The only output I get is:

5
3
7
2
9
6

Min Index: 3
Min Index: 3
Min Index: 3
Min Index: 3
<Program Terminated At This Point>

我一直在努力工作几个小时,我不知道为什么我总是将索引3作为最小的数字。我在实施中做错了什么? 我一直在思考它几个小时,我的逻辑似乎是正确的?

2 个答案:

答案 0 :(得分:0)

在你第一次传球时,它发现min是2。 然后它会删除2,即索引3。 然后它再次通过,除了小于2。 所以它仍然有索引3,并删除它。 这将继续,直到您不再有超过3项。 然后它失败了,因为矢量太小而不能擦除索引3。

在你的for循环之前将你的min重置回99999。

答案 1 :(得分:0)

正如Blastfurnace所指出的那样。我忘了重置Min。 这应该解决它。

int idx=0;    
while (vect.size() > 0)
{
    int min = 99999;
    for (int x=0; x<vect.size(); x++)
    {
        if (vect[x] < min)
        {
            min = vect[x];
            idx = x;
        }
    }
    cout << "Min index: " << idx << endl;
    sorted.push_back(vect[idx]);
    vect.erase(vect.begin()+idx);        
}