1

プログラムは完全に実行され、ベクトルの番号は最終的にファイルに記録されますが、逆にはなりません。

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

void reversevector(vector<double> &vd, int i, int j)
{
    if(i>=j) {
        double temp = vd[i];
        vd[i]=vd[j];
        vd[j]=temp;
        i++;
        j--;
    }
}
int main() {
    double n = 0;
    vector<double> vd;
    while (cin>>n) {
        vd.push_back(n);
    }

    reversevector(vd,0,vd.size()-1);

    ofstream ofs("reversedlist.txt");

    if(!ofs) {
        cout<<"error";
        exit(1);
    }

    for(int i=0; i<vd.size(); i++){
        ofs<<vd[i];
    }

    ofs.close();
}

例: ベクターに 12345 を入力すると、54321 がファイルに出力されます。ファイルを開くと、まだ 12345 が含まれています。

4

4 に答える 4

6

この線

if (i >= j)

reversevector関数内である必要があります

while (i < j)

それ以外の場合は、条件付きで最初と最後の番号を入れ替えて、すぐに終了します。

于 2012-11-26T04:28:13.470 に答える
3

次のようにメソッドを呼び出します。

reversevector( {1,2,3,4,5} , 0, 4 )

その後、

if (0>=4) {
  ...
 }

その後、メソッドを終了します-何も起こりません。

もちろん、デバッグしていれば、これを自分で見つけることができたはずです。

于 2012-11-26T04:29:11.600 に答える
2

逆ベクトルにはループはありません。一度実行してから終了します。これを機能させるには、配列をループして置き換える必要があります。

于 2012-11-26T04:28:38.703 に答える
1

関数reversevectorは最大2つの要素を交換します。ベクトルを反転するには、3つ以上の要素を交換する必要があります。とにかくのテスト条件はiffalseになるので、実際には何もしません。

于 2012-11-26T04:28:25.283 に答える