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' toint sorted(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>>。这甚至不接近整数数组。您只需要编写一个处理 data_t 而不是 ints 的函数。

如果该函数应该排序,data那么您应该使用std::sort,为此您需要编写一个比较函数,该函数可以比较 的两个元素,data以便查看排序结果中哪个元素应该排在另一个之前。

这是一个使用带有 lexicographical_compare 的 lambda 提供这种比较函数的示例。

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

尝试将 a 传递reference给原始向量。为什么?

  • 您仍然想使用原始矢量而不制作副本
  • 您不能传递null引用,因此参数始终有效
  • 你没有做任何指针算术,所以要安全并使用reference

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

像这样传递你的data_t结构:

sorted(data, max_record_size);

现在您可以访问sorted函数内的 data_t 结构。

你知道你的代码不会编译吗?

  • unsigned max_record_size并且int temp[max_record_size]无效。如果要在堆栈上分配数组,则需要使用常量大小。
  • 处理 的类中的>>运算符没有重载,因此该语句也被破坏:istreamvector<vector<double>>infile >> data;
于 2012-07-23T22:07:18.773 回答