0

私は初心者プログラマーで、このコードを機能させようとしています:

#include <iostream>
#include <vector>
using namespace std;
template <typename T>
T min(vector<T>vec) {
    T x=vec[0];
    int index;
    for (int i=0; i<vec.size(); i++) {
        if (vec[i]<x) { x=vec[i]; index=i; }
    }
    return index;
}
template <typename T>
void printVec (vector<T>v) {
    for (int i=0; i<v.size(); i++) 
        cout<<v[i]<<endl; 
}
template <typename T>
void selectSort(vector<T>&first) {
vector<T>second;
while(first.size()!=0) {
    second.push_back(first[min(first)]);
    first.erase(first.begin()+min(first));
  }
      first=second;
}


int main() {
    int Mas[] = { 7, 15, 14, 12, 99, 180, 197, 567, 123, -101, 32, 144, 156, 177, 4, -17, -88, 18, 99, 143, -90 };
    int dim = sizeof(Mas)/sizeof(int);
    vector<int>v (&Mas[0], &Mas[dim]);
    int m=min(v);
    selectSort(v);
    printVec(v);

    cin.get();
    return 0; }

何らかの理由で、

    while(first.size()!=0) {

ループがうまくいかないようです。誰か助けてくれませんか?私の悪い英語でごめんなさい。

4

1 に答える 1

2

ではmin、変数indexは初期化されていません。

ベクトルの最初の要素が最小の要素である場合min、ランダムなガベージ値が返されます。

0 に初期化します (これは、デフォルトの最小値のインデックスです)。

コードに問題があることをコンパイラが警告した場合は、プログラムを実行する前であっても、まずその問題を修正する必要があります。

于 2013-03-17T11:23:09.797 に答える