std :: sort()C ++不能工作,但它如此简单,原因:(一维数组

时间:2011-04-18 19:39:46

标签: c++ arrays sorting std

这应该很简单,我发现第一个参数是数组名,第二个是数组+数组名的大小。然而,它似乎根本没有排序,实际上它没有做任何事情,也没有在控制台上写任何东西,我在做些什么傻事?

int main()
{
    readFromFile();
    system("pause");
    return 0;
}

void readFromFile()
{
    string line;
    int i = 0;
    int j;
    ifstream file("ACW2_data.txt");

if(file.is_open())
{
    getline(file, line);

    while (!file.eof())
    {
        file >> numbers[i];
        i++;
        int elements = sizeof(numbers) / sizeof(numbers[0]);
        **sort(numbers, numbers + elements);**
    }
    file.close();
}
else
{
    cout << "Cant open the file" << endl;
}

for(j = 0; j < i; j++)
{
    cout << numbers[j] << endl;
}

system("pause");
}
你觉得怎么样?

4 个答案:

答案 0 :(得分:2)

while (!file.eof())
{
    file >> numbers[i];
    i++;
    int elements = sizeof(numbers) / sizeof(numbers[0]);
    **sort(numbers, numbers + elements);**
}
file.close();

while (file >> numbers[i])
{
    ++i;
}
sort( numbers, numbers + i );
file.close();

std::vector<your_int_type> numbers;
your_int_type tmp;
while (file >> tmp)
{
    numbers.push_back(tmp);
}
std::sort( numbers.begin(), numbers.end() );
file.close();

答案 1 :(得分:2)

编辑:目前,我假设numbers是一个int数组。如果没有,那么,我希望你能弄清楚该怎么做......

int main() { 
    std::ifstream file("ACW2_data.txt");

    std::vector<int> numbers;

    file.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    std::copy(std::istream_iterator<int>(file),
              std::istream_iterator<int>(),
              std::back_inserter(numbers));

    std::sort(numbers.begin(), numbers.end());

    std::copy(numbers.begin(), numbers.end(), 
              std::ostream_iterator<int>(std::cout, "\n"));
    return 0;
}

答案 2 :(得分:0)

首先,numbers定义在哪里,它的类型是什么?

其次,在while循环的每次迭代中,numbers中的元素数量为i,因此您无需计算它。

第三,为什么每次插入新元素时都要对numbers进行排序?为什么不插入所有元素,然后排序一次。在while循环之后。

答案 3 :(得分:0)

我猜测,因为你没有显示如何声明numbers的重要细节,它是一个指针,sizeof技巧无法计算分配的大小。最好使用基于模板的sizeof:

template <typename T, int N>
int array_size( T (&)[N] ) {
   return N;
}

或:

template <typename T, int N>
char (&array_size_impl( T(&)[N] ))[N];
#define ARRAY_SIZE( x ) sizeof( array_size_impl( x ) )

因为如果使用指针会触发编译时错误,而不是默默地失败并产生sizeof(x)/sizeof(x[0])技巧的意外结果。