这应该很简单,我发现第一个参数是数组名,第二个是数组+数组名的大小。然而,它似乎根本没有排序,实际上它没有做任何事情,也没有在控制台上写任何东西,我在做些什么傻事?
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");
}
你觉得怎么样?
答案 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])
技巧的意外结果。