0
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>


using namespace std;

typedef vector <double> record_t;
typedef vector <record_t> data_t;


int sorted(int *data,int max_record_size)
{


}




int main()
{
    // Here is the data we want.
    data_t data;

    // Here is the file containing the data. Read it into data.
    ifstream infile( "sort.txt" );
    infile >> data;

    // Complain if something went wrong.
    if (!infile.eof())
    {
        cout << "Fooey!\n";
        return 1;
    }

    infile.close();

    // Otherwise, list some basic information about the file.
    cout << "Your CSV file contains " << data.size() << " records.\n";



    unsigned max_record_size = 0;
    for (unsigned n = 0; n < data.size(); n++)
        if (max_record_size < data[ n ].size())
            max_record_size = data[ n ].size();
    cout << "The largest record has " << max_record_size << " fields.\n";
    int i;
    for (i=0; i <= max_record_size; i++)
    {

        cout << "your data contains " << data[ 0 ][ i ] << ".\n";
        int temp[max_record_size];

        sorted(&data,max_record_size);

        //cout << "Your sorted data contains" << sorted [0] [i] << ".\n";
    }


    cout << "Good bye!\n";
    system("PAUSE");

    return 0;
}

data_t*' toint *'を引数1' tointsorted(int *、int)'に変換できません

数値のリストを含む配列であるはずのデータのポインターをソート関数に渡そうとしています。正確に何が間違っているのでしょうか。理解できるように詳しく説明してください。ありがとうございます。

4

3 に答える 3

1

配列がありません。C(またはC ++)の配列は単なる整数のリストであり、同じように渡すことができます。

ただし、ベクトルがあります(record_tはintになると思います)。vector <>は配列とよく似た動作をしますが、実際のオブジェクトではありません。

おそらくやりたいことは、関数を次のように書くことです。

int sorted(data_t& data, int max_record_size)

そしてあなたの電話は単に

sorted(data,max_record_size);
于 2012-07-23T21:41:14.853 に答える
0

data_tですvector<vector<double>>。これは、intの配列にさえ近くありません。intsではなくdata_tを処理する関数を作成する必要があります。

関数がソートすることになっている場合は、dataを使用する必要があります。そのためには、の2つの要素を比較して、ソートされた結果でどちらが優先されるかを確認std::sortできる比較関数を作成する必要があります。data

lexicographical_compareでラムダを使用してこのような比較関数を提供する例を次に示します。

sort(begin(data),end(data), [](record_t const &lhs,record_t const &rhs) {
    return lexicographical_compare(begin(lhs),end(lhs),begin(rhs),end(rhs));]
});
于 2012-07-23T21:41:16.413 に答える
0

reference元のベクトルにを渡してみてください。なんで?

  • コピーを作成せずに元のベクトルで作業したい
  • 参照を渡すことができないnullため、引数は常に有効です
  • ポインタ演算を行っていないので、安全を確保して、reference

    int sorted(data_t& data, int max_record_size)
    {             
    }
    

data_t次のように構造を渡します。

sorted(data, max_record_size);

これで、関数内のdata_t構造にアクセスできますsorted

また

あなたはあなたのコードがコンパイルされないことを知っていますか?

  • unsigned max_record_sizeおよびint temp[max_record_size]は無効です。スタックに配列を割り当てる場合は、一定のサイズを使用する必要があります。
  • を処理するクラスの>>演算子にはオーバーロードがないため、このステートメントも壊れています。istreamvector<vector<double>>infile >> data;
于 2012-07-23T22:07:18.773 に答える